Module.nesting and module_eval

Discussion in 'Ruby' started by Brian Mitchell, Apr 1, 2005.

  1. 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.
     
    Brian Mitchell, Apr 1, 2005
    #1
    1. Advertisements

  2. 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.
     
    Yukihiro Matsumoto, Apr 2, 2005
    #2
    1. Advertisements

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 (here). After that, you can post your question and our members will help you out.