switch, case, default, break

概要

<#switch value>
  <#case refValue1>
    ...
    <#break>
  <#case refValue2>
    ...
    <#break>
  ...
  <#case refValueN>
    ...
    <#break>
  <#default>
    ...
</#switch>

这里:

  • valuerefValue1,等: 表达式将会计算成相同类型的标量。

breakdefault 是可选的。

描述

这个指令的用法是不推荐的,因为向下通过的行为容易出错。使用 elseif来代替, 除非你想利用向下通过这种行为。

Switch 被用来选择模板中的一个片段,如何选择依赖于表达式的值:

<#switch animal.size>
  <#case "small">
     This will be processed if it is small
     <#break>
  <#case "medium">
     This will be processed if it is medium
     <#break>
  <#case "large">
     This will be processed if it is large
     <#break>
  <#default>
     This will be processed if it is neither
</#switch>

switch 中间必须有一个或多个 <#case value>, 在所有 case 标签之后,有一个可选的 <#default>。 当FreeMarker到达 switch 指令时,它会选择一个 case 指令,这里的 refValue 等于 value 并且继续模板处理。 如果没有和合适的值匹配的 case 指令,那么就继续处理 default 指令,如果它存在,否则就继续处理 switch 结束标签之后的内容。现在有一个混乱的事情: 当它选择一个 case 指令后,它就会继续处理其中的内容, 直到遇到 break 指令。也就是它遇到另外一个 case 指令或 <#default> 标记时也不会自动离开 switch 指令。比如:

<#switch x>
  <#case 1>
    1
  <#case 2>
    2
  <#default>
    d
</#switch>

如果 x 是 1,它会打印1 2 d;如果 x 是 2,那么就会打印2 d;如果 x 是 3,那么就会打印d。这就是前面提到的向下通过行为。 break 标记指示 FreeMarker 直接略过剩下的 switch 代码段。