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")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章