布尔值的内置

Page Contents

c(与 boolean 一起使用时)

Note:

自 FreeMarker 2.3.20 起存在此内置功能。

此内置函数将布尔值转换为“计算机语言”的字符串,而不是人类用户。无论boolean_format配置设置如何,结果都将是"true""false",因为该设置旨在指定供人类使用的格式。在为 JavaScript 等生成布尔 Literals 时,应使用此 Literals。

如果仅生成计算机语言的输出,并且最终用户不读取该输出,则可能需要将boolean_format配置设置设置为c(因为 FreeMarker 2.3.29 起),在这种情况下${aBoolean}将具有与${aBoolean?c}相同的输出。

请注意,此内置也适用于 Strings

字符串(与布尔值一起使用时)

将布尔值转换为字符串。您可以通过两种方式使用它:

  • As foo?string("yes", "no"):如果布尔值为 true,则将布尔值格式化为第一个参数(此处为"yes"),如果为 false,则格式化为第二个参数(此处为"no")。除非您只打算使用简单的文本格式格式化布尔值,否则应使用?then(whenTrue, whenFalse),因为类型限制较少,并且它会懒惰地评估其参数! ?string的返回值始终是一个字符串(与?then不同),因为如果参数不是字符串,则它们将被转换为字符串。还要注意,尽管只使用了其中一个参数,但对两个参数都进行了评估(与?then不同)。如果参数不只是 Literals,这可能会产生负面影响。

  • foo?string从 FreeMarker 2.3.20 开始不推荐使用:改为使用?c,或者将boolean_format setting设置为"yes,no"之类的东西,然后转换会自动发生。如果您仍然需要了解这一点,它将使用默认字符串将布尔值转换为字符串,以表示 true 和 false 值。默认情况下,true 表示为"true",false 表示为"false"。仅当您使用 FreeMarker 生成源代码时才最有用(但从 2.3.20 开始使用?c)。要更改这些默认字符串,可以使用boolean_format setting

请注意,在极少数情况下,值是多类型的并且既是布尔值又是字符串,则将返回变量的字符串值,因此boolean_format设置将无效。

then

Note:

此内置功能自 FreeMarker 2.3.23 开始存在。

booleanExp?then(whenTrue, whenFalse)一样使用,在类似 C 的语言(即booleanExp ? whenTrue : whenFalse)中扮演与三元运算符相同的角色。如果booleanExp评估为布尔值 true,则评估并返回其第一个参数,否则,如果booleanExp评估为布尔值 false,则其评估并返回其第二个参数。当然,所有三个表达式都可以是任意复杂的。参数表达式可以具有任何类型,甚至可以是不同的类型。

此内置函数的一个重要特殊特性是,仅对其中一个参数表达式进行求值。这与常规方法调用不同,在常规方法调用中,所有参数表达式都被求值,无论该方法是否需要它们。这也意味着不需要的参数甚至可以引用丢失的变量而不会引起错误。 (当然,它在语法上仍然不能无效.)

Example:

<#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

Note:

如果需要基于非布尔值进行选择,则应使用switch built-in而不是将多个then -s 彼此嵌套,例如priority?switch(1, "low", 2, "medium", 3, "high")甚至是true?switch(priority <= 1, "low", priority == 2, "medium", priority >= 3, "high")