From: "mame (Yusuke Endoh)" Date: 2012-11-03T12:17:55+09:00 Subject: [ruby-core:48786] [ruby-trunk - Feature #6810] `module A::B; end` is not equivalent to `module A; module B; end; end` with respect to constant lookup (scope) Issue #6810 has been updated by mame (Yusuke Endoh). Target version set to Next Major ---------------------------------------- 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-32276 Author: alexeymuranov (Alexey Muranov) Status: Assigned Priority: Low Assignee: matz (Yukihiro Matsumoto) Category: core 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 -- http://bugs.ruby-lang.org/