freeMarker模板语言参考:内建函数参考④布尔值内建函数

布尔值内建函数

  • c (当用于布尔值时)
  • string (当用于布尔值时)
  • then

c (当用于布尔值时)
该内建函数将布尔值转换为字符串,针对 “计算机语言” 而不是用户。不管 boolean_format 的设置是什么, 结果是 “true” 或 “false”。
当生成JavaScript的时候,应该会用到它,否则修改 boolean_format 的话可以打断生成的计算机语言输出。

请注意,该内建函数 对字符串也起作用

<#--  true  -->
${true?c}

string (当用于布尔值时)
该内建函数的所有用法都已经废弃了
将布尔值转换为字符串。可以两种方式来使用:

  • foo?string(“yes”, “no”): 从 FreeMarker 2.3.23 版本开始废弃:使用 ?then(“yes”, “no”) 来替代。如果布尔值是true, 这会返回第一个参数(此处是:“yes”), 否则返回第二个参数(此处是:“no”)。 请注意,返回值总是一个字符串;如果参数是数字,那么首先会转换成字符串。 也请注意,两个参数是评估过的,不管只有一个会被用到; 如果参数不仅仅是文字的话,这也许会有负面影响
  • foo?string: 从 FreeMarker 2.3.20 版本开始废弃:使用 ?c 来代替,或者设置 boolean_format 设置项,比如像 “yes,no”,之后转换会自动发生。 如果仍然需要知道,这会转换布尔值为字符串,使用默认字符串来显示 true 和 false 值。默认情况下,true 被呈现为 “true”, 而 false 被呈现为 “false”。 如果使用 FreeMarker 来生成代码,这是很有用的 (但是从 2.3.20 版本开始, 请使用 ?c),因为这些值不是非本地化(语言,国家)敏感的。 要修改这些默认设置,可以使用 boolean_format 设置。
  • 请注意,在很少有的情况下, 当值是多类型且同时是布尔值和和字符串时,那么将会返回字符串值,所以 boolean_format 设置没有效果
<#--  true   -->
${true?string}
<#--  yes   -->
${true?string("yes", "no")} 
<#--  Y   -->
${true?string("Y", "N")} 

then
使用于 booleanExp?then(whenTrue, whenFalse),就像是类C语言中的三元运算符 (也就是说,booleanExp ? whenTrue : whenFalse)。如果 booleanExp 评估为布尔值 true, 那么就评估并返回第一个参数,而若 booleanExp 评估为布尔值 false,那么就评估并返回它的第二个参数。当然,三个表达式可以是任意复杂的。 参数表达式可以是任意类型,也可以是不同类型

该内建函数的一个重要特殊属性是只有一个参数表达式会被评估。 这和普通的方法调用不同,它们会评估所有的参数表达式,而不管方法是否需要它们。 这也就以为着不需要的参数也可以用于不存在的变量而不会引发错误。 (当然它不能是非法的语法。)

<#assign foo = true>
<#--  Y  -->
${foo?then('Y', 'N')}

<#assign foo = false>
${foo?then('Y', 'N')}
<#--  N  -->
<#assign x = 10>
<#assign y = 20>
<#-- Prints 100 plus the maximum of x and y: -->
<#--  120  -->
${100 + (x > y)?then(x, y)}

如果需要选择非布尔值,可以使用 switch 内建函数 来替代嵌套多个 then

比如 priority?switch(1, "low", 2, "medium", 3, "high")

或者是

true?switch(priority <= 1, "low", 
priority == 2, "medium", priority >= 3, "high")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章