在Ruby中,为命名空间编写class Foo::Bar
和module Foo; class Bar
之间有区别吗?如果是这样,是什么?
答案 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