有没有办法在 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
有任何想法吗?
有没有办法在 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
有任何想法吗?
根据经验和阅读VTL 参考,没有办法做到这一点。如果您有很多这样的任务,也许您可以考虑定义自己的 velocimacro 来尝试避免重复 if else。
例如,如果宏只打印一个字符串,您可以执行以下操作:
#set ($name = "#condOpt($args.get(0), "default")")
宏调用周围的双引号很重要,因为这意味着 #set 的 RHS 已被解析。
我最终按照你说的做了,马克:
#macro(condOp $check, $default)
#if ($check == "")
$default
#else
$check
#end
#end
然后我可以这样称呼它:
#set ($name = "#condOp($args.get(0), 'default')")
作为记录,使用 Velocity 2.1+,您可以提供替代参考值:
${args[0]|'default'}