12.10.1. Velocimacro 参数

Velocimacros 的参数可以是以下的VTL元素:

  • 引用(Reference): 以 '$' 打头的元素
  • 字面字符串(String literal) : 比如"$foo" 或 'hello'
  • 字面数字: 1, 2 ….
  • 整数范围: [ 1..2] 或 [$foo .. $bar]
  • 对象数组: [ "a", "b", "c"]
  • 布尔真
  • 布尔假

当把引用作为参数传递给Velocimacros时,请注意引用是按“名字”传递的。这意味着他们的值在每次使用他们的Velocimacro中产生。这个特性允许你在方法调用是传递引用,并在每次使用时进行方法调用。例如,Fo,当调用下面的Velocimacro 时,

#macro( callme $a )
         $a $a $a
     #end

     #callme( $foo.bar() )

结果是,在方法bar() 中,引用 $foo 被调用了3次。

咋看时,这个特征让人吃惊,当当你考虑一下Velocimacros的原本动机 – 在VTL模板中避免很多“剪切复制”操作—你就会明白。它允许你将无状态对象,比如在一个颜色表格行内重复产生一些颜色次序的对象,传递给Velocimacro。

如果你需要使用这个特征,你通常可以从方法内取得一个值,作为一个新的引用传递给宏:

 #set( $myval = $foo.bar() )
     #callme( $myval )