What does the ::MyClass/MyModule
scope operator do in Ruby, what is its purpose?
Asked
Active
Viewed 2,542 times
2 Answers
20
This explicitly refers to the MyClass in the global scope. If there is a MyClass in the global scope, but also a MyClass inside of SomeModule, referring to MyClass from inside of SomeModule will refer to MyClass inside of the module, not the global MyClass. Saying ::MyClass explicitly refers to the MyClass in the global scope.
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

AboutRuby
- 7,936
- 2
- 27
- 20
3
"global scope" just means the constant is defined on the Object
class. So ::SomeModule
is shorthand for Object::SomeModule

horseyguy
- 29,455
- 20
- 103
- 145