Хотите оценить выражение здесь или фрагмент шаблона?Выражение имеет вид 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, то есть.