условный оператор в Скорости
-
12-09-2019 - |
Вопрос
Есть ли способ выполнять троичные операторы в 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")")
Двойные кавычки вокруг вызова макроса важны, поскольку это означает, что RHS #set проанализирован.
Другие советы
В конце концов я сделал так, как ты сказал, Марк:
#macro(condOp $check, $default)
#if ($check == "")
$default
#else
$check
#end
#end
И тогда я могу назвать это вот так:
#set ($name = "#condOp($args.get(0), 'default')")
Не связан с StackOverflow