Also habe ich einen einfachen Generator definiert:
%Vor%Grundsätzlich möchte ich es so dekorieren, dass es alle Werte zurückgibt, aber das letzte:
%Vor%Wenn ich jetzt gen1
neu definiere %Vor%aber wenn ich verwende:
%Vor%Warum funktioniert mein Dekorateur nicht und wie kann ich ihn reparieren?
Es funktioniert nicht aufgrund der Interaktion zwischen Dekorator und Rekursion. Da Ihr Generator rekursiv ist, beruht er auf einer bestimmten Wiederholungsbeziehung. Indem Sie einen modifizierenden Dekorator zwischen den Generator und den Untergenerator einfügen, brechen Sie diese Rekursionsbeziehung.
Solange @dec
das letzte Element löscht, können Sie es nicht mit gen1()
kompatibel machen, indem Sie @dec
allein ändern.
Sie könnten jedoch gen1()
ändern, um es mit @dec
kompatibel zu machen:
Der Trick besteht darin, gen1()
nicht-rekursiv zu machen und die gesamte Arbeit an einen anderen, undekorierten Generator zu delegieren. Letzteres kann rekursiv sein.
Meine Lösung, wenn ich so etwas tun musste, war, einen Generator auf den Generator zu legen! Dies ist eigentlich die Idee eines dekorierten Anrufs. Das tust du,
%Vor%genau für Ihr Problem (ergibt nur den letzten Wert) Ich würde etwas tun wie:
%Vor%