freemarker Funktionen vs Makros

9

Hallo Freemarkers-Gurus

Ich verstehe, dass der Unterschied zwischen Freimarker-Funktionen und Makros darin besteht, dass Makros auf die Ausgabe drucken können, aber keine Werte zurückgeben können, während Funktionen Werte zurückgeben, aber nicht auf die Ausgabe drucken können.

Nun, ich habe ein Problem, weil ich beide Werte drucken und zurückgeben muss:

Ich mache rekursive Baumsuche mit Freemarker und deshalb habe ich ein Makro, das rekursiv heißt. Während der Baum untersucht wird, muss ich sowohl Knoteninformationen für die Ausgabe drucken, als auch Statistiken über die erkundeten Knoten berechnen und zurückgeben (z. B. die Summe einer bestimmten Eigenschaft der erkundeten Knoten)

Wenn ich ein Makro verwende, das rekursiv aufgerufen wird, kann ich Knotendaten drucken, kann aber die Statistiken nicht an die aufrufende Entität zurückgeben.

Wenn ich eine rekursiv aufgerufene Funktion verwende, kann ich die Statistik zurückgeben, kann aber keine Knotendaten in der Ausgabe ausgeben.

Eine Lösung könnte sein, den Baum zweimal zu untersuchen, einmal, um Knoteninformationen zu drucken, und einen anderen, um Statistiken zu sammeln, aber ich würde es hassen, diese unelegante Lösung zu verwenden.

Kann jemand eine bessere Lösung vorschlagen?

Danke

    
user1584078 08.08.2012, 08:51
quelle

2 Antworten

1

Oder Sie können sogar eine globale Variable als Speicher für Ihre Statistiken verwenden:

%Vor%     
exside 11.08.2015 13:05
quelle
0

Sie können die Statistiken in einer nicht #local -Variablen speichern. Wie im Makro tun Sie <#assign treeStats = ...> und dann auf Call-Site:

%Vor%

Ja, es ist peinlich, aber FreeMarker hat keine Out-Params, um ein sekundäres Ergebnis zurückzugeben. Eigentlich könntest du einen Hack mit Loop-Variablen machen, aber es ist vielleicht zu verwirrend, und wenn du wirklich einen Body brauchst, kannst du diesen Trick nicht benutzen:

%Vor%     
ddekany 08.08.2012 10:32
quelle

Tags und Links