Lassen Sie uns offene Klasse Module
und fügen Sie eine Methode zu:Klasse, Modul, ihre eigenclasses und Methodensuche
class Module
def foo
puts "phew"
end
end
ich diese Methode, indem Sie diese nennen kann,
Class.foo
was verständlich ist weil Klasse Class
Class
ist, deren Oberklasse Module
ist. So kann es Instanzmethoden aufrufen, die in Module
definiert sind.
Nun wird das Verfahren bar
unten definiert auf Module
‚s Eigenklasse:
class Module
def self.bar
puts "bar"
end
end
aber jetzt
Class.bar
funktioniert auch.
Kann mir jemand erklären, wie Class
Zugriff auf Methoden in Module
's Eigenklasse?
Ich denke, ich habe es jetzt. Das Nachschlagen funktioniert nicht so, wie ich es vorher erklärt habe. Wenn ich Class.foo
tue, wird die Methode in Class
's Eigenklasse gesucht und dann ist es Superklasse, die Module
' s Eigenklasse den ganzen Weg bis BasicObject
's Eigenklasse ist, an welchem Punkt es sich selbst dreht (wie eine Schlange essen eigenen Schwanz) zu suchen für Methode in Class
(wie Class
ist die Oberklasse von BasicObject
's Eigenklasse) und dann zu seiner Superklasse Module
, wo es die Methode findet.
Ähnlich, wenn ich Class.bar
mache, wird Methode in Class
's Eigenklasse und dann in Module
' s Eigenklasse, wo es es findet.
Wenn ich
class Class
def check
puts "class instance method"
end
end
und
class Module
def self.check
puts "modules eigenclass method"
end
def check
puts "module instance method"
end
end
Vermutung wot ist der Ausgang, wenn ich tun:
Class.check
Das ist mein derzeitiges Verständnis:
Verwandte Diskussion Ich fand hilfreich: https: // stackoverflow.com/questions/13269271/why-a-modules-singleton-methode-ist-nicht-sichtbar-in-downstream-eigenklassen-wo –