有人可以为我解释ruby常量查找吗?

Mat*_*ggs 4 ruby constants

进一步来说:

  • 你什么时候需要在范围前加上::(比如::Foo::Bar)
  • 什么时候直接引用一个scoped const ok?(只是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
Run Code Online (Sandbox Code Playgroud)

Ian*_*Ian 5

你什么时候需要在范围前加上::(如:: Foo :: Bar)

当前名称空间中有另一个具有相同名称的常量时.

什么时候直接引用一个scoped const ok?(只是Foo :: Bar)

当前名称空间中没有其他具有相同名称的常量时.IE浏览器.当该标识符是明确的.同样,Bar如果它是明确的,你可以使用它来提高可读性.

这种行为是如此混乱有充分的理由吗?

它平衡可读性和易用性与特异性.::Foo::Bar::Baz::Boo当您深入到命名空间时,并不总是希望(全局唯一标识符).