class Numeric

Numeric ist die Klasse, von der alle übergeordneten numerischen Klassen erben sollten.

Numeric ermöglicht die Instanziierung von Heap-alloziierten Objekten. Andere Kern-Numerikklassen wie Integer werden als Immediates implementiert, was bedeutet, dass jeder Integer ein einzelnes unveränderliches Objekt ist, das immer als Wert übergeben wird.

a = 1
1.object_id == a.object_id   #=> true

Es kann immer nur eine Instanz der Ganzzahl 1 geben, zum Beispiel. Ruby stellt dies sicher, indem es die Instanziierung verhindert. Wenn versucht wird, eine Duplizierung durchzuführen, wird dieselbe Instanz zurückgegeben.

Integer.new(1)                   #=> NoMethodError: undefined method `new' for Integer:Class
1.dup                            #=> 1
1.object_id == 1.dup.object_id   #=> true

Aus diesem Grund sollte Numeric verwendet werden, wenn andere numerische Klassen definiert werden.

Klassen, die von Numeric erben, müssen coerce implementieren, die ein Array mit zwei Elementen zurückgibt, das ein Objekt enthält, das in eine Instanz der neuen Klasse umgewandelt wurde, und self (siehe coerce).

Erbende Klassen sollten auch arithmetische Operator-Methoden (+, -, * und /) und den <=> Operator implementieren (siehe Comparable). Diese Methoden dürfen sich auf coerce stützen, um die Interoperabilität mit Instanzen anderer numerischer Klassen sicherzustellen.

class Tally < Numeric
  def initialize(string)
    @string = string
  end

  def to_s
    @string
  end

  def to_i
    @string.size
  end

  def coerce(other)
    [self.class.new('|' * other.to_i), self]
  end

  def <=>(other)
    to_i <=> other.to_i
  end

  def +(other)
    self.class.new('|' * (to_i + other.to_i))
  end

  def -(other)
    self.class.new('|' * (to_i - other.to_i))
  end

  def *(other)
    self.class.new('|' * (to_i * other.to_i))
  end

  def /(other)
    self.class.new('|' * (to_i / other.to_i))
  end
end

tally = Tally.new('||')
puts tally * 2            #=> "||||"
puts tally > 1            #=> true

Was gibt es hier

Zuerst, was woanders ist. Klasse Numeric

Hier bietet die Klasse Numeric Methoden für

Abfragen

Vergleichen

Konvertieren

Sonstiges