我只是坚持了一段时间.拿这个基础:
module Top class Test end module Foo end end
后来,我可以通过这样做Foo
来扩展内部的类Test
:
module Top module Foo class SomeTest < Test end end end
但是,如果我尝试通过使用::
指定模块来最小化缩进:
module Top::Foo class Failure < Test end end
这失败了:
NameError:未初始化的常量Top :: Foo :: Test
这是一个错误,还是Ruby解析变量名称的逻辑结果?
这是一个错误,还是只是一个合乎逻辑的结果
这是一个"怪癖".有人认为这是一个错误.
用于查找未解析常量的父作用域由模块嵌套确定.它恰好发生在您使用时module Top::Foo
,它只创建一个嵌套级别而不是两个嵌套级别.注意:
module Top module Foo class SomeTest Module.nesting # => [Top::Foo::SomeTest, Top::Foo, Top] end end end module Top::Foo class SomeTest Module.nesting # => [Top::Foo::SomeTest, Top::Foo] end end