Re-opened nested module anomaly in Ruby -
why re-opening nested module give different results depending on syntax used? example, works fine:
module module e end end module module e def e.e end end end but this:
module module e end end module a::e def e.e end end gives error:
reopen.rb:6:in `<module:e>': uninitialized constant a::e::e (nameerror) reopen.rb:5:in `<main>' (before points out, workaround use self instead of module name when defining e.e, that's not point of post.)
the module keyword sets namespace context checked references existing names of modules. these namespaces searched inner-to-outer resolve references module (and class) names.
in first example, looks may need define e.e inside module e block, in fact don't:
module module e end end module def e.e end end what happens in both examples ruby looks @ current namespace, , tries <namespace>::e module name. in both examples, first thing checks in fact a::e::e not exist. falls next context. examples differ: in first example a::e valid, in second example, e not. error throws relates first name checked.
Comments
Post a Comment