我曾相信
module A
module B
...
end
end
和(前提A
是预先定义了模块):
module A::B
...
end
是等价的,但事实证明不是。鉴于:
module A
C = :foo
end
这两种形式的行为不同:
module A
module B
puts C
end
end
# => :foo
module A::B
puts C
end
# => NameError: uninitialized constant A::B::C
这种差异背后的逻辑是什么?特别是,为什么不能以第二种形式A::B
访问A::C
(尽管它可以以第一种形式)?
更新
我在 Ruby 核心上找到了一些相关的帖子: