尝试在 freemarker 中创建 min(a,b) 函数失败
failed attempt to create a min(a,b) function in freemarker
我需要一种方法来找到 FreeMarker 中两个值中的最小值,我尝试这样做,但失败了:
<#function min a b>
<if a gt b>
<#return b />
<else>
<#return a />
</if>
</#function>
...
/* min#1 ${min(0.280617, 1.0)} */
/* min#2 ${min(1.0, 0.280617)} */
我没有在两行都打印出 0.280617,而是这样:
/* min#1 1 */
/* min#2 0.280617 */
为什么?我该如何解决?
抱怨。这有效:我只是不知道为什么......如果我使用 <#if>
而不是 <if>
,我过去常常在函数末尾从 Freemarker 得到一个错误。现在好像没问题了。
<#function min a b>
<#if a gt b>
<#return b />
<#else>
<#return a />
</#if>
</#function>
<if ...>
只是静态文本(因为它不以 <#
或任何其他保留模式开头),并且函数忽略静态文本(它们不输出任何内容),所以您函数刚刚在第一个 #return
无条件地返回,因为 <if ...>
只是静态文本。 (非空白静态文本应该是一个错误,但是在 10 多年之后现在修复它会非常向后不兼容......也许在 2.4 中会有一个选项来修复这样的事情。)
另请注意,函数可以写成更简单的形式(需要 2.3.23):
<#function min(a, b)>
<#return (a < b)?then(a, b)>
</#function>
我需要一种方法来找到 FreeMarker 中两个值中的最小值,我尝试这样做,但失败了:
<#function min a b>
<if a gt b>
<#return b />
<else>
<#return a />
</if>
</#function>
...
/* min#1 ${min(0.280617, 1.0)} */
/* min#2 ${min(1.0, 0.280617)} */
我没有在两行都打印出 0.280617,而是这样:
/* min#1 1 */
/* min#2 0.280617 */
为什么?我该如何解决?
抱怨。这有效:我只是不知道为什么......如果我使用 <#if>
而不是 <if>
,我过去常常在函数末尾从 Freemarker 得到一个错误。现在好像没问题了。
<#function min a b>
<#if a gt b>
<#return b />
<#else>
<#return a />
</#if>
</#function>
<if ...>
只是静态文本(因为它不以 <#
或任何其他保留模式开头),并且函数忽略静态文本(它们不输出任何内容),所以您函数刚刚在第一个 #return
无条件地返回,因为 <if ...>
只是静态文本。 (非空白静态文本应该是一个错误,但是在 10 多年之后现在修复它会非常向后不兼容......也许在 2.4 中会有一个选项来修复这样的事情。)
另请注意,函数可以写成更简单的形式(需要 2.3.23):
<#function min(a, b)>
<#return (a < b)?then(a, b)>
</#function>