function, return

概要

<#function name param1 param2 ... paramN>
  ...
  <#return returnValue>
  ...
</#function>

这里:

  • name:方法变量的名称(不是表达式)
  • param1, param2 等: 局部变量的名称, 存储参数的值(不是表达式),在 = 号后面和默认值 (是表达式)是可选的。
  • paramN,最后一个参数, 可以可选的包含一个尾部省略(...), 这就意味着宏接受可变的参数数量。局部变量 paramN 将是额外参数的序列。
  • returnValue: 计算方法调用值的表达式。

return 指令可以在 <#function ...></#function> 之间被用在任意位置和任意次数。

没有默认值的参数必须在有默认值参数 (paramName=defaultValue) 之前

描述

创建一个方法变量(在当前命名空间中,如果你知道命名空间的特性)。 这个指令和 macro 指令 的工作方式一样,除了 return 指令必须有一个参数来指定方法的返回值,而且视图写入输出的将会被忽略。 如果到达 </#function> (也就是说没有 return returnValue), 那么方法的返回值就是未定义变量。

示例1:创建一个方法来计算两个数的平均值:

<#function avg x y>
  <#return (x + y) / 2>
</#function>
${avg(10, 20)}

将会输出:

15

示例2:创建一个方法来计算多个数的平均值:

<#function avg nums...>
  <#local sum = 0>
  <#list nums as num>
    <#local sum = sum + num>
  </#list>
  <#if nums?size != 0>
    <#return sum / nums?size>
  </#if>
</#function>
${avg(10, 20)}
${avg(10, 20, 30, 40)}
${avg()!"N/A"}

将会输出:

15
25
N/A