首先在常量前加双冒号的意思是根命名空间下的类或模块:
:A
例如你有如下代码:
class A def show puts "我来裸A" endenda = ::A.new a.show #=> puts "我来裸A"Module Mb class A < ::A def show puts "我来自Mb::A" end end class B < A def show2 show() end endend b = Mb::B.new b.show2 #=> puts "我来自Mb::A"
即在一个模块内,当我们使用一个常量,它优先在当前模块范围内查找,就如上面的代码所见,当 B < A,这个A是Mb::A