Unterteilung von Fixnum in Ruby

7

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:

%Vor%     
cloudhead 08.07.2009, 01:57
quelle

3 Antworten

17

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.

    
Yehuda Katz 08.07.2009, 03:23
quelle
4

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.

    
Jason Creighton 08.07.2009 02:26
quelle
2

Können Sie FixNum nicht selbst verlängern? Wie ...

%Vor%     
Turnor 08.07.2009 02:16
quelle

Tags und Links