Module.nesting and module_eval

B

Brian Mitchell

I was wondering why Module.nesting is not consitent when called from
module_eval:

class Object
def Object.inherited(sub)
p sub.module_eval { Module.nesting } # [Object]
p sub.module_eval("Module.nesting") # [A::B, Object]
end
end

module A
class B
p Module.nesting # [A::B, A] OK
end
p Module.nesting # [A] OK
end

The evals inside of Object.inherited don't return the same thing. I
think I understand why, classes are objects that can be shared across
bindings but how would I go about fixing this without touching any of
"module A ... end"?

Thanks.

Brian.
 
Y

Yukihiro Matsumoto

Hi,

In message "Re: Module.nesting and module_eval"

|I was wondering why Module.nesting is not consitent when called from
|module_eval:

Module.nesting uses compile time information if it's available. The
nesting information is not available from within eval and its family
with string, so it tries its best (i.e. [A::B, Object]).

matz.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top