Как сделать inline, если / иначе (ака тройной оператор) в скорости? - PullRequest
33 голосов
/ 15 февраля 2011

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

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

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

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

Есть ли в Velocity краткая форма?Я хочу быть в состоянии сделать если / в ином случае.

Ответы [ 3 ]

45 голосов
/ 15 февраля 2011

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

#set($value = "#if($flag)red#{else}blue#end")
18 голосов
/ 14 мая 2014

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

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

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

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

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

#if($includePrefix)Affected #{end}Inspection
5 голосов
/ 31 августа 2012

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

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

Тогда

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

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

...