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

age*_*217 9 ruby

什么是::MyClass/MyModule范围运营商在Ruby中做的,什么是它的目的是什么?

Abo*_*uby 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
Run Code Online (Sandbox Code Playgroud)