2016-08-25 2 views

Antwort

1

Seit

module M1 
    puts "self = #{self}" 
    module self::GenName 
    puts Module.nesting 
    def self.gen_name 
    end 
    end 
end 
    # self = M1 
    # M1::GenName 
    # M1 

wir sehen, dass M1 das gleiche ist wie

module M1 
    module M1::GenName 
    puts Module.nesting 
    def self.gen_name 
    end 
    end 
end 
    # M1::GenName 
    # M1 

, die nicht überraschen sollte. GenName wird zum Beispiel in den beiden Fällen

M1::GenName.methods(false) 
    #=> [:gen_name] 

referenziert. Wenn wir statt

schreiben
module M2 
    module GenName 
    puts Module.nesting 
    def self.gen_name 
    end 
    end 
end 
    # M2::GenName 
    # M2 

dann

M2::GenName.methods(false) 
    #=> [:gen_name] 

Dies zeigt, dass Ruby GenName auf die gleiche Weise in beiden Fällen verweist. Ich bin überzeugt, dass es keinen Unterschied gibt, wenn self. hinzugefügt wird, aber ich denke auch, dass das obige einen Beweis nicht erfüllt.

+0

Es ist wahr. Das Hinzufügen von 'self ::' ist fast immer sinnlos, und die Gelegenheiten, wo es unbedingt erforderlich ist, sind so dunkel, dass ich mir nicht sicher bin, ob ich an eins denken kann. – tadman

Verwandte Themen