:: MyClass Ruby作用域操作符有什么作用?

时间:2010-08-30 00:00:49

标签: ruby

::MyClass/MyModule范围操作符在Ruby中做了什么,它的目的是什么?

2 个答案:

答案 0 :(得分:18)

这明确指的是全局范围内的MyClass。如果全局范围内有一个MyClass,而且SomeModule里面还有一个MyClass,那么从SomeModule里面引用MyClass会引用模块里面的MyClass,而不是全局MyClass。 Saying :: MyClass显式引用全局范围内的MyClass。

class MyClass
  def self.something
    puts "Global MyClass"
  end
end

module SomeModule
  class MyClass
    def self.something
      puts "SomeModule::MyClass"
    end
  end

  print "From the module: "
  MyClass.something

  print "Explicitly using global scope: "
  ::MyClass.something
end

print "From the global scope: "
MyClass.something

print "Explicitly using module scope: "
SomeModule::MyClass.something

答案 1 :(得分:2)

“全局范围”仅表示常量在Object类上定义。因此::SomeModuleObject::SomeModule

的简写