условный оператор в скорости - PullRequest
11 голосов
/ 13 июля 2009

Есть ли способ сделать троичные операторы в 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

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 13 июля 2009

Из опыта и прочтения VTL Reference нет способа сделать это. Если у вас было много подобных заданий, возможно, вы могли бы попытаться определить свой собственный velocimacro, чтобы избежать повторения if else.

Например, если макрос печатает только одну строку, вы можете сделать следующее:

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

Двойные кавычки вокруг макро вызова важны, так как это означает, что RHS для #set анализируется.

3 голосов
/ 13 июля 2009

Я закончил тем, что делал, как ты сказал, Марк:

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

И тогда я могу назвать это так:

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