Apache Velocity 宏默认参数值

Posted

技术标签:

【中文标题】Apache Velocity 宏默认参数值【英文标题】:Apache Velocity macro default parameter values 【发布时间】:2015-04-29 11:27:25 【问题描述】:

我想更新在多个不同 .vtl 文件之间共享的宏以包含新参数。但是,我只想更改其中一个 .vtl 文件中的调用,而其他文件保持不变。所以,我本质上想添加一个可选参数,或者如果没有提供参数,则添加一个具有默认值的参数。

文档 (here) 在“#macro”部分中提到了可选的默认值,但经过几个小时的烦躁,我终生无法弄清楚正确的语法是什么。

所以我想取现有的宏:

    #macro( my_macro ) 
        oldValue
    #end

然后把它变成一个宏,比如:

    #macro( my_macro $param="oldValue" ) 
        $param
    #end

我可以通过这两个调用中的任何一个正确调用它并获得指定的输出:

    #my_macro()            => oldValue
    #my_macro("newValue")  => newValue

我已经尝试了文档中指定的所有排列,但找不到任何有效的方法。有谁知道正确的语法?有没有可能是我丢失的属性?

我正在使用 Velocity 1.7 和 VelocityTools 2.0。我也在使用设置 velocimacro.arguments.strict=true 如果这很重要。但是,如果不进行大量更新/重新测试,我无法轻松更改此属性。

【问题讨论】:

【参考方案1】:

默认参数对我也不起作用。但是您可以执行此解决方法:

#macro(my_macro $param)
  #if(!$param)
     #set($param = "oldValue")
  #end
  $param
#end

【讨论】:

是的,我最终选择了那条路线,但它要求我将 velocimacro strict 属性更改为 false,而我并不想这样做。但无论如何,一切都很好,结局很好。

以上是关于Apache Velocity 宏默认参数值的主要内容,如果未能解决你的问题,请参考以下文章

velocity.properties配置说明

velocity.properties配置说明

c++函数给一个形参赋予了默认值,则实参是否可以不写这个参数

c++函数给一个形参赋予了默认值,则实参是否可以不写这个参数

spark UDF 怎么实现参数数量可变,不传参时候,有默认值。见下图?

Velocity——宏