2010-08-30 4 views

Répondre

18

Cela fait explicitement référence à MyClass dans la portée globale. S'il y a une classe MyClass dans la portée globale, mais aussi une classe MyClass à l'intérieur de SomeModule, se référer à MyClass à l'intérieur de SomeModule fera référence à MyClass à l'intérieur du module, et non à MyClass global. Saying :: MyClass fait explicitement référence à MyClass dans la portée globale.

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

« portée globale » signifie juste que la constante est définie sur la classe Object. Donc ::SomeModule est un raccourci pour Object::SomeModule