Wie istWas ist der Unterschied zwischen "Modul Self :: X" und "Modul X"?
module self::GenName
unterscheidet sich von einfach
module GenName
Beachten Sie, dass dieses Modul in einem anderen Modul verschachtelt ist.
Wie istWas ist der Unterschied zwischen "Modul Self :: X" und "Modul X"?
module self::GenName
unterscheidet sich von einfach
module GenName
Beachten Sie, dass dieses Modul in einem anderen Modul verschachtelt ist.
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
schreibenmodule 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.
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