Подтвердить что ты не робот

Как сделать inline if/иначе (aka trernary operator) в Velocity?

В чистой Java я мог бы сделать это:

value = (a > b) ? a : b;

В то время как в Velocity длинная форма:

#if($a > $b)          
    #set($value = $a)
#else
    #set($value = $b)
#end

Есть ли короткая форма в Velocity? Я хочу иметь возможность сделать if/else inline.

4b9b3361

Ответ 1

Вы можете сделать

#set($value = "#if($flag)red#{else}blue#end")

Ответ 2

Вам не нужна директива #macro или #set. Ключ использует фигурные скобки для директивы #else.

#if($plural)were#{else}was#end

Из doc (почти в конце раздела "Условные" ):

Еще одно полезное замечание. Если вы хотите включить текст сразу же после директивы #else, вам нужно будет использовать фигурные скобки, непосредственно связанные с директивой, чтобы отличить его от следующего текста. (Любая директива может быть ограничена фигурными скобками, хотя это наиболее полезно для #else).

ПРИМЕЧАНИЕ. Независимо от того, что говорит документ, я обнаружил, что при использовании простого оператора inline if может потребоваться добавить фигурные скобки.

#if($includePrefix)Affected #{end}Inspection

Ответ 3

Существует также подход с многократным макросом:

#macro(iif $cond $then $else)#if($cond)$then#else$else#end#end

Тогда

#define ($value)
#iif("$a > $b", $a, "$b")
#end

Обратите внимание, что в документах скорости указано, что использование макросов влияет на производительность.