Ich habe Rubys singuläre Methoden und singuläre Klassen als Memorandum zusammengefasst.
In Ruby können Sie eine Methode definieren, die für ein Objekt direkt eindeutig ist. Diese Methode wird als singuläre Methode bezeichnet.
class Hoge
end
obj = Hoge.new
def obj.method1
p 'Singuläre Methode'
end
obj.method1
# => "Singuläre Methode"
Sie sollten bestätigen können, dass method1
auf diese Weise aufgerufen wurde.
Was sind die Konsequenzen eines anderen Objekts?
obj2 = Hoge.new
obj2.method1
# => undefined method `method1'
Ich habe so einen Fehler bekommen. Sie können sehen, dass es sich auch in derselben Klasse um eine für obj
einzigartige Methode handelt.
Sie können sehen, dass Sie eine Methode nicht aufrufen können, wenn es sich um ein Objekt handelt, das selbst in derselben Klasse keine singuläre Methode definiert. Um auf der sicheren Seite zu sein, verwenden wir "singleton_methods", um sicherzustellen, dass die "Hoge" -Klasse keine singulären Klassen hat.
class Hoge
end
obj = Hoge.new
def obj.method1
p 'Singuläre Methode'
end
p Hoge.singleton_methods
p obj.singleton_methods
# => []
# => [:method1]
Wenn eine Methode jedoch zu einer Klasse gehört, fragen Sie sich möglicherweise, zu welcher Klasse die singuläre Methode gehört. Als Ergebnis der Untersuchung scheint es eine ** singuläre Klasse ** zu geben, und die singuläre Methode gehört zu dieser Klasse.
Um ehrlich zu sein, verstehe ich nur, dass singuläre Klassen singuläre Methoden definieren. Lassen Sie uns den Inhalt mit "Vorfahren" überprüfen.
p obj.singleton_class.ancestors
# => [#<Class:#<Hoge:0x00007fca5c866ab8>>, Hoge, Object, Kernel, BasicObject]
Auf diese Weise ist die Superklasse der Singularklasse wie Ihre eigene Klasse. Es scheint, dass die Methodensuche in der Reihenfolge Singularklasse → Eigene Klasse → Superklasse ist ....
Recommended Posts