c (当用于布尔值时)
该内建函数从 FreeMarker 2.3.20 版本开始存在
该内建函数将布尔值转换为字符串,针对
"计算机语言" 而不是用户。不管
boolean_format
的设置是什么,
结果是 "true"
或 "false"
。
当生成JavaScript的时候,应该会用到它,否则修改
boolean_format
的话可以打断生成的计算机语言输出。
请注意,该内建函数 对字符串也起作用。
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
设置没有效果。
then
该内建函数从 FreeMarker 2.3.23 版本开始存在。
使用于
booleanExp?then(whenTrue,
whenFalse)
,就像是类C语言中的三元运算符
(也就是说,booleanExp ?
whenTrue :
whenFalse
)。如果
booleanExp
评估为布尔值 true,
那么就评估并返回第一个参数,而若 booleanExp
评估为布尔值 false,那么就评估并返回它的第二个参数。当然,三个表达式可以是任意复杂的。
参数表达式可以是任意类型,也可以是不同类型。
该内建函数的一个重要特殊属性是只有一个参数表达式会被评估。 这和普通的方法调用不同,它们会评估所有的参数表达式,而不管方法是否需要它们。 这也就以为着不需要的参数也可以用于不存在的变量而不会引发错误。 (当然它不能是非法的语法。)
例如:
<#assign foo = true> ${foo?then('Y', 'N')} <#assign foo = false> ${foo?then('Y', 'N')} <#assign x = 10> <#assign y = 20> <#-- Prints 100 plus the maximum of x and y: --> ${100 + (x > y)?then(x, y)}
Y N 120
如果需要选择非布尔值,可以使用 switch
内建函数 来替代嵌套多个
then
,比如
priority?switch(1, "low", 2, "medium", 3,
"high")
,或者是 true?switch(priority <= 1,
"low", priority == 2, "medium", priority >= 3,
"high")
。