Ruby Language
Affe Patching in Rubin
Suche…
Bemerkungen
Das Affen-Patchen hat zwar praktische Auswirkungen, weist jedoch einige nicht sofort erkennbare Fallstricke auf. Ein Patch wie dieser im Beispiel verschmutzt den globalen Geltungsbereich. Wenn zwei Module Hash#symbolize
, wird nur das letzte erforderliche Modul angewendet. Der Rest wird gelöscht.
Wenn bei einer gepatchten Methode ein Fehler auftritt, zeigt der Stacktrace einfach auf die gepatchte Klasse. Dies impliziert, dass es einen Fehler in der Hash
Klasse selbst gibt (die es jetzt gibt).
Schließlich, da Ruby sehr flexibel ist, welche Container zu halten sind, eine Methode, die beim Schreiben sehr unkompliziert erscheint, verfügt über viele undefinierte Funktionen. Das Erstellen von Array#sum
ist beispielsweise für ein Array von Zahlen geeignet, unterbricht jedoch ein Array einer benutzerdefinierten Klasse.
Eine sicherere Alternative sind Verfeinerungen, verfügbar in Ruby> = 2.0.
Funktionalität hinzufügen
Sie können jeder Klasse in Ruby eine Methode hinzufügen. Das aufrufende Objekt wird mit self
referenziert.
class Fixnum
def plus_one
self + 1
end
def plus(num)
self + num
end
def concat_one
self.to_s + '1'
end
end
1.plus_one # => 2
3.plus(5) # => 8
6.concat_one # => '61'