更具體地說:有人可以解釋紅寶石不斷查找我嗎?
- 當你需要用前綴範圍
::
(如::Foo::Bar
) - 當直接指到範圍常量好嗎? (只是
Foo::Bar
) - 有沒有一個很好的理由,爲什麼這種行爲是如此混亂?
編輯:我說的是這樣的東西
module Foo
THING = 'thing'
module Bar
puts THING
end
end
#=> thing
module Foo::Bar
puts THING
end
#=> NameError: uninitialized constant Foo::Bar::THING
對我談論的奇怪點更加清楚 –
您的第二個示例僅將Foo :: Bar命名空間引入了範圍。 OTOH,當你明確地打開每個命名空間時 - 就像你的第一個例子 - Foo和Foo :: Bar都被引入了範圍。 – Ian
這很奇怪,但會解釋它。我假設它會在任何語法中搜索導致該類的所有模塊。你知道兩種語法之間的其他區別嗎? –