13

有没有办法在 Velocity 中做三元运算符?这就是我想做的:

#set ($name = ($args.get(0) == "") ? "default" : $args.get(0))

而不是厚实的 if-else

#if ($args.get(0) == "")
    #set ($name = "default")
#else
    #set ($name = $args.get(0))
#end

有任何想法吗?

4

3 回答 3

7

根据经验和阅读VTL 参考,没有办法做到这一点。如果您有很多这样的任务,也许您可​​以考虑定义自己的 velocimacro 来尝试避免重复 if else。

例如,如果宏只打印一个字符串,您可以执行以下操作:

#set ($name = "#condOpt($args.get(0), "default")")

宏调用周围的双引号很重要,因为这意味着 #set 的 RHS 已被解析。

于 2009-07-13T13:20:47.863 回答
4

我最终按照你说的做了,马克:

#macro(condOp $check, $default)
    #if ($check == "")
        $default
    #else
        $check
    #end
#end

然后我可以这样称呼它:

#set ($name = "#condOp($args.get(0), 'default')")
于 2009-07-13T13:44:25.480 回答
0

作为记录,使用 Velocity 2.1+,您可以提供替代参考值

${args[0]|'default'}
于 2022-01-29T17:04:46.407 回答