Ich bin immer noch neu bei Ruby und schreibe im Grunde nur mein erstes Mikro-Programm, nachdem ich Coopers Buch beendet habe. Ich wurde auf die Richtung hingewiesen, Affen zu vermeiden, aber das Problem ist, ich weiß nicht, was die Alternativen sind, um das gleiche Verhalten zu erreichen. Grundsätzlich möchte ich eine neue Methode hinzufügen, auf die jedes String-Objekt zugreifen kann. Der offensichtliche Affe-Patching Weg ist:Alternativen zu Affe-Patching-Kern-Klassen
class String
def do_magic
...magic...
end
end
Ich erinnere mich, es gibt einen Weg mit String.send. Aber ich kann mich nicht erinnern, wie es gemacht wurde und wo ich es gelesen habe. Kann jemand auf Alternativen hinweisen, die mich diese Methode weiterhin für die String-Klasse und untergeordnete Objekte verfügbar machen lassen?
do_magic brauchen kann ich sehen, wie es wirklich hängt von der Situation und der Art des Projekts selbst ab. Und ich denke, das würde auch für alle do/do not-Paare gelten. In Anbetracht meines speziellen Falles, ja, macht es Sinn, dass es nicht schaden sollte. Immerhin, ich füge eine neue Methode hinzu. Danke für die Klarstellung! – dmondark
Monkey Patching ist bestenfalls ein rutschiger Abhang. Es mag für kleine Teams in Closed-Source-Projekten elegant erscheinen, aber Sie wissen nie, wann Ihr Quellcode als Schmuckstück verpackt oder anderweitig von jemandem kopiert wurde, und wenn der String etwas anders aussehen soll, dann überschreibt eine Affe-Patch-Methode die andere, und es wird keine Warnung ausgegeben. Es ist ein Rezept für schwer zu findende Bugs. Dies ist besonders problematisch, wenn Sie Methoden von Basisklassen überschreiben, die in Ruby enthalten sind. – emery