2012-09-25 14 views
19

मैं एक बंद करना चाहता हूं जो एक तर्क लेता है (जिसे मैं it के साथ संदर्भित करता हूं) कभी-कभी मैं बंद करने के लिए एक और अतिरिक्त तर्क पारित करना चाहता हूं। मैं यह कैसे कर सकता हूं?वैकल्पिक तर्कों के साथ ग्रोवी क्लोजर

उत्तर

32

आप (जैसे अशक्त के रूप में) एक डिफ़ॉल्ट मान पर दूसरा तर्क सेट कर सकते हैं:

def cl = { a, b=null -> 
    if(b != null) { 
    print "Passed $b then " 
    } 
    println "Called with $a" 
} 

cl('Tim')   // prints 'Called with Tim' 
cl('Tim', 'Yates') // prints 'Passed Yates then Called with Tim 

एक अन्य विकल्प तो जैसे एक vararg सूची b बनाने के लिए होगा:

def cl = { a, ...b -> 
    if(b) { 
    print "Passed $b then " 
    } 
    println "Called with $a" 
} 

cl('Tim')     // prints 'Called with Tim' 
cl('Tim', 'Yates')   // prints 'Passed [Yates] then Called with Tim 
cl('Tim', 'Yates', 'Groovy') // prints 'Passed [Yates, Groovy] then Called with Tim 
+0

जो आसान था;) thanx – Moonlit

+0

@ user1291235 कोई समस्या नहीं :-) एक और संभावित समाधान जोड़ा गया –

+0

और यदि आप बंद शरीर को बदलना नहीं चाहते हैं, तो आप पहले तर्क 'it' नाम कर सकते हैं :-) – Ayman

1

उम्मीद है कि इस

​def clr = {...a -> 
    print "Passed $a then " 
    enter code here 

} 

​clr('Sagar') 
clr('Sagar','Rahul') 
संबंधित मुद्दे