switch, case, default, break指令

前面章节我们介绍 <#if>、<#elseif> 和 <#else> 指令,可以使用这些指令来处理多分支条件判断;如果分支太多,使用 <#if>、<#elseif> 和 <#else> 指令有点繁琐。因此,FreeMaker 引入了 <#switch> 指令。语法如下:

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

参数说明:

  • value、refValue1、refValue2、refValueN: 这些表达式将会计算成相同类型的标量,即数据类型一致。

  • <#case> 至少要有一个,每一个 <#case> 用来处理一种情况;当 <#list> 的 value 和该 <#case> 匹配,则执行 <#case> 下面的内容。

  • <#break> 指令是可选的。该指令用来结束当前 <#case> 指令,跳出 <#list>;如果没有指定,将继续执行下一个 <#case>(如果匹配的话)。

  • <#default> 指令是可选的。当没有匹配到任何一个 <#case> 时执行。

当程序运行到 <#switch> 时,将 <#switch> 的 value 和它下面 <#case> 的 refValue1、refValue2、refValueN 进行比较;如果成功匹配到某个 <#case> 则进入该 <#case>,执行该 <#case> 中的内容;如果定义了 <#break> 指令,则跳出 <#case> 且 结束当前 <#switch>;如果没有定义 <#break> 指令,则继续匹配下一个 <#case>,直到最后一个 <#case>(每个匹配到的 <#case> 和前面的 <#case> 处理逻辑一致);如果定义了 <#default> 指令,则执行 <#default> 指令下面的内容;如果没有定义 <#default> 指令,则结束 <#list> 指令。

实例:使用 <#switch> 来选择模板中的一个片段。

<html>
<head>
    <title>switch 指令</title>
</head>
<body>
<div>
    <h2>消息内容</h2>
<#switch message_type>
<#case "email">
    <p>这是一封邮件</p>
    <#break>
<#case "sms">
    <p>这是一条短信</p>
    <#break>
<#default>
    <p>No Message</p>
</#switch>
</div>
</body>
</html>

输出结果:

<html>
<head>
    <title>switch 指令</title>
</head>
<body>

<div>
    <h2>消息内容</h2>
    <p>这是一封邮件</p>
</div>

</body>
</html>

在 <#switch> 中间必须有一个或多个 <#case value>, 在所有 <#case> 标签之后,有一个可选的 <#default>。 当 FreeMarker 到达 <#switch> 指令时,它会将 <#switch> 指令的 value 和每个 <#case> 指令的 refValue 进行判断;如果相等,则执行当前 <#case> 下面的内容;否则,继续处理下一个 <#case>。 如果没有匹配到合适的 <#case> 指令,那么就继续处理 <#default> 指令(如果它存在);最后,继续处理 </#switch> 结束标签之后的内容。

注意:如果在 <#case> 指令中没有 <#breaker> 指令,程序将继续执行下一个 <#case> 指令(如果匹配的话);比如:

<html>
<head>
    <title>switch 指令</title>
</head>
<body>
<div>
    <h2>消息内容</h2>
<#switch message_type>
<#case "email">
    <p>这是一封邮件</p>
<#case "sms">
    <p>这是一条短信</p>
<#default>
    <p>No Message</p>
</#switch>
</div>
</body>
</html>

输出结果:

<html>
<head>
    <title>switch 指令</title>
</head>
<body>
<div>
    <h2>消息内容</h2>
    <p>这是一封邮件</p>
    <p>这是一条短信</p>
    <p>No Message</p>
</div>
</body>
</html>

如果 type 等于 “email”,它会打印:

<p>这是一封邮件</p>
<p>这是一条短信</p>
<p>No Message</p>

如果 type 等于 “sms”,它会打印:

<p>这是一条短信</p>
<p>No Message</p>

如果 type 不等于 “email”,也不等于 “sms”,它会打印:

<p>No Message</p>

<#break> 标记指示 FreeMarker 直接略过剩下的 <#switch> 代码段。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号