gpt4 book ai didi

freemarker - 如何评估 Freemarker 宏中的参数?

转载 作者:行者123 更新时间:2023-12-04 15:14:50 26 4
gpt4 key购买 nike

假设我们有一个简单的 Freemarker 宏:

<#macro myMacro expr>

<#local x=1>
${expr}
</#local>

<#local x=2>
${expr}
</#local>

</macro>

<@myMacro "A"/> 给出:

一种
一种

我需要类似的东西
<@myMacro "A${x}"/> 应该给出:

A1
A2

但它在传递到宏之前无法插入 ${x} 。
即使我使用原始字符串 r"A${x}"作为参数,这也不起作用。

我尝试使用 ?eval 但还没有结果(((

可以做我需要的吗?

最佳答案

你想在这里评估一个表达式,还是一个模板片段?一个表达式就像 1 + 2"A${x}" (注意引号;它是一个字符串文字),当你传入它时,它看起来像 <@myMacro "1 + 2" /><@myMacro r'"A${x}"' /> ;最后一个比较尴尬。模板片段类似于 <#list 1..x as i>${i}</#list>A${x} (注意没有引号),它更强大,在字符串中看起来更漂亮。从我所看到的,你可能想要评估一个模板片段,所以它应该是:

<#macro myMacro snippet>
<#-- Pre-parse it for speed -->
<#local snippet = snippet?interpret>

<#local x = 1>
<@snippet />

<#local x = 2>
<@snippet />
</#macro>

然后您可以将其用作:
<@myMacro r"A${x}" />

甚至:
<@myMacro r"<ul><#list 1..x as i><li>${i}</li></#list><ul>" />

无论如何,整个事情是 FreeMarker 的一个有点奇怪的用法,如果你非常依赖 ?interpret?eval (就像您每个 HTTP 请求执行数百次一样),您可能会发现它很慢。 Java 标准很慢,也就是说。

关于freemarker - 如何评估 Freemarker 宏中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8367489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com