Ich verstehe also, dass Sie Fixnum, Float oder Integer nicht direkt ableiten sollten, da sie keine Methode #new haben. Die Verwendung von DelegateClass scheint jedoch zu funktionieren, aber ist es der beste Weg? Wer weiß, was der Grund hinter diesen Klassen ist #new ist?
Ich brauche eine Klasse, die sich wie eine Fixnum verhält, aber einige zusätzliche Methoden hat, und ich würde gerne in der Lage sein, auf ihren Wert durch self
innerhalb der Klasse zu verweisen, zum Beispiel:
Sie können eine schnelle Weiterleitungsimplementierung selbst ganz einfach einrichten:
%Vor%Dann können Sie beliebige Methoden auf MyNum hinzufügen, aber Sie müssen in diesen Methoden mit @number arbeiten, anstatt super direkt aufrufen zu können.
IIRC, die Hauptimplementierung von Ruby speichert Fixnums als unmittelbare Werte, wobei einige der niedrigen Bits des Wortes verwendet werden, um es als Fixnum anstelle eines Zeigers auf ein Objekt auf dem Heap zu markieren. Aus diesem Grund sind Fixnums auf einem 32-Bit-Computer nur 29-Bit (oder was auch immer) anstelle eines vollständigen Wortes.
Aus diesem Grund können Sie Methoden nicht einer einzelnen "Instanz" von Fixnum hinzufügen, und Sie können sie nicht unterklassifizieren.
Wenn Sie eine "Fixnum-like" -Klasse haben, müssen Sie wahrscheinlich eine Klasse mit einer Fixnum-Instanzvariablen erstellen und Methodenaufrufe entsprechend weiterleiten.
Tags und Links ruby inheritance