In Ruby könnten wir super
innerhalb der Singleton-Methode verwenden, um die Singleton-Methode der entsprechenden Superklasse aufzurufen, wie der folgende Code zeigt.Wie ist die Beziehung zwischen der Metaklasse der Basis und der abgeleiteten Klasse in Ruby?
class Base
def self.class_method
puts "Base class method"
end
end
class Derived < Base
def self.class_method
puts "Derived class method"
super
end
end
Derived.class_method
# Derived class method
# Base class method
aber ich nicht ganz scheinen zu bekommen, wie das Gespräch super
innerhalb Derived.class_method
konnte Base.class_method
erreichen. Ich nehme an, dass class_method
auf ihrer Metaklasse definiert ist, bedeutet das, dass ihre Metaklasse eine Eltern/Kind-Beziehung hat? (Ich kann nicht ganz bestätigen, dass durch Experimente)
aktualisieren: Ich stelle diese Frage, weil ich sehe, erinnerte irgendwo es irgendeine Art von Beziehung bettwen Basis und abgeleiteten Klasse metaclass (aber ich kann nicht finde es nicht mehr). Zusätzlich zu wissen, wie eigentlich super
funktioniert, möchte ich auch bestätigen, ob die beiden Metaklassen völlig getrennt sind oder nicht.
Gibt es eine Möglichkeit zu 'sehen', die die Beziehung zwischen #Base und #Derived? z.B. wie die normale '.superclass'. – bryantsai
Ich habe den Trick hinzugefügt, der eine Eigenklasse aus dem Versteck holt. Aber das Diagramm ist nicht konsistent mit dem, was der Trick zeigt :( –
gut ... # ist nicht # , das ist mein Problem ... Dosis die Verbindung von #Derived zu #Base wirklich existieren? –
bryantsai