Macros 在另一个宏的字符串参数内使用Freemarker宏调用

Macros 在另一个宏的字符串参数内使用Freemarker宏调用,macros,freemarker,Macros,Freemarker,我有一个宏a可以格式化一些文本 …${text}… 和另一个宏,该宏具有接受文本的参数 另一个${x}文本 我想用x参数调用B,使其成为由A,s.th格式化的文本。喜欢 返回另一个 这有可能吗 我尝试了?将解释为- 但此操作失败,出现错误: 此处应为字符串、日期或数字、表达式。。。。是 而是一个freemarker.core.exploration$TemplateProcessorModel FreeMarker中的宏调用似乎与其他语言中的函数调用有所不同。我发现了一种使用assign的解决方

我有一个宏a可以格式化一些文本
…${text}…
和另一个宏,该宏具有接受文本的参数
另一个${x}文本

我想用x参数调用B,使其成为由A,s.th格式化的文本。喜欢
返回另一个

这有可能吗

我尝试了
?将
解释为-
但此操作失败,出现错误:

此处应为字符串、日期或数字、表达式。。。。是 而是一个freemarker.core.exploration$TemplateProcessorModel


FreeMarker中的宏调用似乎与其他语言中的函数调用有所不同。

我发现了一种使用assign的解决方法:



无论如何,知道这是否可能是很有趣的。

宏调用不是表达式,因此不能在表达式中使用(如参数值)。宏因其副作用而被调用,副作用通常是打印到输出,并且没有返回值。函数(请参见
#函数
)是为其返回值而调用的,因此函数调用是表达式。所以在这种情况下,你可能需要函数,而不是宏


但是,如果必须在表达式(或任意模板片段)中使用宏调用的输出,则必须通过
..
..
捕获输出。(注意使用
#escape
。如果您使用
${…}
重新打印捕获的输出,它将再次被转义,因此您需要
#noescape

谢谢您的帮助,我忘记了函数。。。无论如何,FreeMarker绝对是一种非常酷的语言;-)