对Ruby命名空间使用“::”而不是“module ...”

时间:2011-08-03 13:53:16

标签: ruby namespaces

在Ruby中,为命名空间编写class Foo::Barmodule Foo; class Bar之间有区别吗?如果是这样,是什么?

2 个答案:

答案 0 :(得分:9)

如果您使用class Foo::Bar,但尚未定义Foo模块,则会引发异常,而module Foo; class Bar方法将定义Foo尚未确定。

此外,使用块格式,您可以在:

中定义多个类
module Foo
  class Bar; end
  class Baz; end
end

答案 1 :(得分:7)

还要注意Ruby-ismness的这个奇怪的一点:

FOO = 123

module Foo
  FOO = 555
end

module Foo
  class Bar
    def baz
      puts FOO
    end
  end
end

class Foo::Bar
  def glorf
    puts FOO
  end
end

puts Foo::Bar.new.baz    # -> 555
puts Foo::Bar.new.glorf  # -> 123