2010-08-30 9 views

risposta

18

Questo fa esplicitamente riferimento a MyClass nell'ambito globale. Se c'è un MyClass nello scope globale, ma anche un MyClass all'interno di SomeModule, facendo riferimento a MyClass dall'interno di SomeModule farà riferimento a MyClass all'interno del modulo, non al MyClass globale. Dire :: MyClass si riferisce esplicitamente a MyClass nell'ambito 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

"scope globale" significa semplicemente che la costante è definita sulla classe Object. Quindi ::SomeModule è una scorciatoia per Object::SomeModule