Что делает оператор MyClass Ruby scope?

Что делает оператор области ::MyClass/MyModule в Ruby, какова его цель?

Ответ 1

Это явно относится к MyClass в глобальной области. Если в глобальной области видимости есть MyClass, но и MyClass внутри SomeModule, ссылка на MyClass изнутри SomeModule будет ссылаться на 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

Ответ 2

"глобальная область видимости" означает, что константа определена в классе Object. Итак, ::SomeModule является сокращением для Object::SomeModule