类ClassName和class :: ClassName之间的ruby差异

时间:2014-07-29 07:49:14

标签: ruby

ruby​​中class ClassNameclass ::ClassName之间有什么区别?

class ClassName
end 

VS

class ::ClassName
end

2 个答案:

答案 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