web-dev-qa-db-ja.com

インラインでif / otherwise(別名3項演算子)をVelocityで行う方法は?

純粋なJavaでは、これを行うことができます。

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

一方、Velocityでは、長い形式は次のようになります。

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

Velocityに短い形式はありますか? if/otherwiseインラインを実行できるようにしたい。

33
Michael

できるよ

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

#macroまたは#setディレクティブは必要ありません。キーは#elseディレクティブに中括弧を使用しています。

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

doc から(ほぼ条件セクションの最後に):

もう1つの便利なメモ。 #elseディレクティブの直後にテキストを含める場合は、ディレクティブを直接囲む中括弧を使用して、次のテキストと区別する必要があります。 (どのディレクティブも中括弧で区切ることができますが、これは#elseに最も役立ちます)。

[〜#〜]注[〜#〜]:ドキュメントの内容に関係なく、中かっこを追加する必要があることがわかったので単純なインラインifステートメントを使用する場合。

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

再利用可能なマクロを使用する方法もあります。

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

その後

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

速度のドキュメントには、マクロを使用するとパフォーマンスに影響が及ぶことが記載されていることに注意してください。

7
Vadzim