::MyClass Ruby作用域运算符是什么?

10

在Ruby中,::MyClass/MyModule作用域运算符是什么?它的用途是什么?

2个回答

20

这明确地指的是全局作用域中的MyClass。如果全局作用域中有一个MyClass,但是在SomeModule内部也有一个MyClass,那么从SomeModule内部引用MyClass将引用模块内部的MyClass,而不是全局的MyClass。使用::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

3
“全局作用域”指的是常量在“Object”类上定义。因此,“::SomeModule”是“Object::SomeModule”的简写形式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接