Gibt es einen einfachen Weg in Ruby, um eine Kopie eines Procs zu erzeugen?
Ich habe einen Proc namens @foo
. Ich möchte eine andere Methode, @foo mit zusätzlicher Logik zu ergänzen. Zum Beispiel:
I nicht möchte die zweite Zeile, die die Augmentierung eine rekursive Funktion erzeugt. Stattdessen möchte ich, dass @foo durch den Wert in den lexikalischen Bereich der neuen @ foo-Definition eingebunden wird, wodurch eine Funktion entsteht, die eher wie folgt aussieht:
%Vor%Ich bekomme stattdessen eine unendliche Rekursion und einen eventuellen Stack-Überlauf, weil die resultierende Funktion so aussieht:
%Vor%Ich möchte, dass der Code so ist:
%Vor%aber Klon funktioniert nicht mit Procs.
Außerdem funktioniert der standardmäßige Ruby-Deep-Copy-Hack mit Marshal und Unmarshal auch nicht mit Procs. Gibt es einen Weg, dies zu tun?
Selbst wenn clone
auf Proc
s funktionieren würde, würde es Ihnen nicht weiterhelfen, denn Sie würden immer noch clone
auf dem neuen Wert von @foo
aufrufen, nicht auf der vorherigen, wie Sie wollen .
Sie können stattdessen nur den alten Wert von @foo
in einer lokalen Variablen speichern, die das Lambda schließen kann.
Beispiel:
%Vor% Auf diese Weise bezieht sich old_foo
auf den Wert, den @foo
hatte, wenn augment_foo
aufgerufen wurde und alles wie gewünscht funktioniert.
Tags und Links ruby functional-programming