2009-07-13 22 views
10

वेग में टर्नरी ऑपरेटरों को करने का कोई तरीका है? यह मैं क्या करना चाहते हैं क्या है:वेग में सशर्त ऑपरेटर

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

के बजाय chunky अगर-बाकी

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

कोई भी विचार?

उत्तर

6

VTL Reference अनुभव और पढ़ने के लिए ऐसा करने का कोई तरीका नहीं है। यदि आपके पास इस तरह के बहुत से असाइनमेंट थे, तो शायद आप अपने स्वयं के वेलोसिमाक्रो को परिभाषित करने के लिए और अन्यथा दोहराने से बचने के लिए देख सकते हैं।

उदाहरण के लिए, यदि मैक्रो केवल एक ही स्ट्रिंग प्रिंट आप निम्न कर सकता है:

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

मैक्रो कॉल को दोहरे उद्धरण चिह्नों महत्वपूर्ण हैं के रूप में इसका मतलब है कि #set की आरएचएस पार्स किया गया है।

+0

वहाँ एक रास्ता एक मैक्रो एक समारोह की तरह काम करने के लिए है? तो यह एक चर वापस कर देगा? ताकि मैं '#set ($ name = condOpt ($ args.get (0)," default ") कर सकूं) 'अगर मैक्रो ने $ args.get (0)' पर एक चेक किया है तो यह देखने के लिए कि क्या यह खाली था या नहीं .. – peirix

+0

यदि मैक्रो केवल एक स्ट्रिंग प्रिंट करता है तो आप इसे नाम पर सेट कर सकते हैं। मेरे उत्तर में संपादन देखें। – Mark

+0

यूप। मैक्रो कॉल के आस-पास उन दोहरे उद्धरण थे जो मुझे पकड़े थे। फिक्स्ड और अब काम कर रहा है। धन्यवाद ( – peirix

2

मैं मार्क के रूप में आप ने कहा कि कर समाप्त हो गया,:

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

और फिर मैं यह इतना की तरह कॉल कर सकते हैं:

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

आप इसे जोड़ना चाहते थे जैसे कि मैं एक ही उदाहरण के साथ अपना जवाब संपादित कर रहा था !! – Mark

संबंधित मुद्दे