2009-07-13 11 views
10

Hızda üçlü operatörler yapmanın bir yolu var mı? Bu benim yapmak istediğim şudur:Koşullu operatör Hız

#set ($name = ($args.get(0) == "") ? "default" : $args.get(0)) 

yerine tıknaz if-else

#if ($args.get(0) == "") 
    #set ($name = "default") 
#else 
    #set ($name = $args.get(0)) 
#end 

Herhangi bir fikir?

cevap

6

VTL Reference'u tecrübe etmek ve okumak için bunu yapmanın bir yolu yoktur. Böyle bir çok ödeviniz varsa, belki de kendi hızınızı tanımlamak için kendi velocimacro'yu tanımlamaya bakabilirdiniz. makro yalnızca tek bir dize yazdırır eğer

Örneğin, aşağıdaki yapabilirsiniz: o #set ait RHS ayrıştırılır anlamına gelir makro çağrısı etrafında

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

çift tırnak önemlidir. Dediğin gibi

+0

bir fonksiyonu gibi hareket için bir makro almanın bir yolu var mı? Böylece bir değişken dönecek mi? Böylece #set ($ name = condOpt ($ args.get (0), "default") yapabildiğim) '' makroyu yapıp yapmadığımı görmek için '$ args.get (0)' üzerinde bir kontrol yapıp yapmadığımı kontrol edin. boş ya da değil .. – peirix

+0

Makro sadece tek bir dizgi basarsa, onu isme ayarlayabilirsiniz. Cevabımdaki düzenlemeye bakın. – Mark

+0

Yup. Beni yakalayan makro aramanın etrafındaki çift tırnaktı. Sabit ve şimdi çalışıyor. Teşekkürler (: – peirix

2

Mark, yapıyor sona erdi:

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

Sonra şöyle diyebilirsiniz:

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

Siz de aynı örnekle cevabımı düzenlerken bunu eklediniz! – Mark