Issue #6810 has been updated by Michael Hauser-Raspe. There is another duplicate of this (#11705). I understand this is expected behaviour and it makes sense that this is the way it is with the current architecture. I don't however think that this is the way it _should_ be. Does anyone else have any opinions on this topic? I think it inhibits the simple code organisation of large projects. ---------------------------------------- Feature #6810: `module A::B; end` is not equivalent to `module A; module B; end; end` with respect to constant lookup (scope) https://bugs.ruby-lang.org/issues/6810#change-62698 * Author: Alexey Muranov * Status: Assigned * Priority: Normal * Assignee: Yukihiro Matsumoto * Target version: Next Major ---------------------------------------- =begin Is this the expected behavior? To me it is rather surprising: N = 0 module A module B def self.f; N; end end N = 1 end A::B.f # => 1 but N = 0 module A; end module A::B def self.f; N; end end module A N = 1 end A::B.f # => 0 Even more striking: module A module B def self.f; N; end end end N = 0 A::B.f # => 0 A::N = 1 puts A::B.f # => 1 A::B::N = 2 A::B.f # => 2 but module A; end module A::B def self.f; N; end end N = 0 A::B.f # => 0 A::N = 1 A::B.f # => 0 A::B::N = 2 A::B.f # => 2 =end -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>