Функции freemarker и макросы

Привет гуру фримаркеров

Я понимаю, что разница между функциями freemarker и макросами заключается в том, что макросы могут печатать на выходе, но не могут возвращать значения, в то время как функции могут возвращать значения, но не могут печатать на выходе.

Ну, у меня проблема, потому что мне нужно и печатать, и возвращать значения:

Я выполняю рекурсивное исследование дерева с помощью freemarker, и поэтому у меня есть макрос, который вызывается рекурсивно. По мере изучения дерева мне нужно не только выводить информацию об узле на выходе, но также вычислять и возвращать статистику об исследованных узлах (, например, сумму определенного свойства исследованных узлов )

. Если я использую макрос, вызываемый рекурсивно, я могу распечатать информацию об узле, но не могу вернуть статистику вызывающему объекту.

Если я использую рекурсивно вызываемую функцию, я могу вернуть статистику, но не могу вывести информацию об узле на выходе.

Одним из решений может быть исследование дерева дважды,один раз для печати информации об узле и другой для сбора статистики, но я бы не хотел использовать это неэлегантное решение.

Может ли кто-нибудь предложить лучшее решение?

Спасибо

9
задан user1584078 7 August 2012 в 21:51
поделиться