你好自由职业者大师
我知道freemarker函数和宏之间的区别在于宏可以打印到输出,但不能返回值,而函数可以返回值但不能打印到输出.
好吧,我遇到了问题,因为我需要打印并返回值:
我正在使用freemarker进行递归树探索,因此我有一个宏被称为recurvively.在正在探索树时,我需要将节点信息打印到输出,还要计算并返回有关所探索节点的统计信息(例如,探索的节点的特定属性的总和)
如果我使用recurvively调用宏,我可以打印节点信息但不能将统计信息返回给调用实体.
如果我使用递归调用的函数,我可以返回统计信息,但不能在输出上打印节点信息.
一种解决方案可能是两次探索树,一次打印节点信息,另一种收集统计数据,但我不愿意使用这种不太优雅的解决方案.
有人能提出更好的解决方案吗?
谢谢
您可以将统计数据存储在非#local变量中。就像在宏中一样<#assign treeStats = ...>,然后在调用站点上:
<#import my="myutils.ftl">
...
<@my.tree input />
<#assign stats = my.treeStats /> <#-- or whatever you want with my.treeStats -->
Run Code Online (Sandbox Code Playgroud)
是的,这很尴尬,但是 FreeMarker 没有输出参数来返回辅助结果。实际上,您可以使用循环变量进行黑客攻击,但这可能太令人困惑了,而且如果您确实需要一个主体,则不能使用此技巧:
<@my.tree input; res><#assign stats = res></@>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8422 次 |
| 最近记录: |