ruby中class ClassName
和class ::ClassName
之间有什么区别?
class ClassName
end
VS
class ::ClassName
end
答案 0 :(得分:4)
如果类在
module Foo
class ClassName
end
end
将在Foo
模块中定义一个新类。这可以像Foo::ClassName
一样访问。
另一方面,这个:
module Foo
class ::ClassName
end
end
将在根名称空间中定义(或猴子补丁)类ClassName
。
答案 1 :(得分:1)
::Class
说'在顶级命名空间中寻找Class'。差异显示在模块的上下文中。
module A
def foo
X.new
end
end
A.foo # => A::X.new
module B
def foo
::X.new
end
end
B.foo # => X.new