Can someone please explain what the difference is?
A assumed these were synonymous, but they are not:
module A
module B
…
end
end
Not equivalent to?:
module A::B
…
end
Thanks alot.
Can someone please explain what the difference is?
A assumed these were synonymous, but they are not:
module A
module B
…
end
end
Not equivalent to?:
module A::B
…
end
Thanks alot.
Gene A. wrote:
[I] assumed these were synonymous, but they are not:
I stand corrected. It appears that in order to use the following syntax:
module A::B
…
end
module A must be defined.
Gene A. wrote:
Gene A. wrote:
[I] assumed these were synonymous, but they are not:
I stand corrected. It appears that in order to use the following syntax:
module A::B
…
endmodule A must be defined.
Yes. But even then,
module A; end
module A::B
…
end
is different to
module A
module B
…
end
end
in the way that constants are looked up.
module A; FOO = 123; end
=> 123module A::B
puts FOO
end
NameError: uninitialized constant A::FOO
from (irb):3
from :0module A; module B
puts FOO
end; end
123
=> nil
The constant that classes are assigned to when defined may be prefixed
by the names of existing modules using the scope operator (::). When
this happens, the leading scope operator places the class or module in
the top-level scope.
Here is the example:
CONST = ‘outer’
module A
CONST = ‘inner’
end
module A
class B
def self.get_const
CONST
end
end
end
p A::B.get_const # => inner
Now, class B is inserted into module A’s namespace, but it’s not
interpreted in the context of A. As a result, the reference to CONST
resolves to the top-level constant, not A’s version.
class A::B
def self.get_const
CONST
end
end
p A::B.get_const # => outer
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs