2013-08-09 7 views
26

मैं एक webservice के लिए एक रैपर विधि लिखना चाहता हूं, सेवा 2 अनिवार्य और 3 वैकल्पिक पैरामीटर स्वीकार करती है।वैकल्पिक पैरामीटर के साथ ग्रोवी विधि

एक छोटा उदाहरण के लिए, मैं निम्नलिखित कोड काम

def myMethod(pParm1='1', pParm2='2') { 
    println "${pParm1}${pParm2}" 
} 

myMethod(); 
myMethod('a') 
myMethod(pParm2:'a') // doesn't work as expected 
myMethod('b','c') 

प्राप्त करना चाहते हैं उत्पादन होता है:

12 
a2 
[pParm2:a]2 
a2 
bc 

क्या मैं प्राप्त करने के लिए चाहते हैं एक पैरामीटर देने के लिए और प्राप्त करने के लिए है परिणाम के रूप में 1a। क्या यह संभव है (सबसे अजीब तरीके से)?

उत्तर

47

के रूप में यह खड़ा नहीं किया जा सकता है ... कोड

def myMethod(pParm1='1', pParm2='2'){ 
    println "${pParm1}${pParm2}" 
} 

मूल रूप से बनाता है ग्रूवी निम्न विधियों बनाएँ:

Object myMethod(pParm1, pParm2) { 
    println "$pParm1$pParm2" 
} 

Object myMethod(pParm1) { 
    this.myMethod(pParm1, '2') 
} 

Object myMethod() { 
    this.myMethod('1', '2') 
} 

एक विकल्प के रूप में एक वैकल्पिक मानचित्र के लिए होगा पहला param:

def myMethod(Map map = [:], String mandatory1, String mandatory2){ 
    println "${mandatory1} ${mandatory2} ${map.parm1 ?: '1'} ${map.parm2 ?: '2'}" 
} 

myMethod('a', 'b')    // prints 'a b 1 2' 
myMethod('a', 'b', parm1:'value') // prints 'a b value 2' 
myMethod('a', 'b', parm2:'2nd') // prints 'a b 1 2nd' 

जाहिर है, इस अन्य लोगों को दस्तावेज करने से पता चलता है कि जादुई में क्या होता है map और पाठक को डिफ़ॉल्ट क्या छोड़ा गया है ;-)

+0

धन्यवाद, लगता है कि जाने का एक तरीका दिखता है। मैं इसे एक शॉट दूंगा और प्रयास के साथ तुलना करूंगा जब मैं वैकल्पिक मानकों के लिए डिफ़ॉल्ट मानों का उपयोग करता हूं। जावा दुनिया से आ रहा है मैं उस पर काफी उपयोग कर रहा हूं ... – Chris

+0

क्या मैं सही हूं, myMethod का हस्ताक्षर 'myMethod को परिभाषित करना चाहिए (स्ट्रिंग अनिवार्य 1, स्ट्रिंग अनिवार्य 2, मानचित्र मानचित्र = [:]) '? –

+1

नोप, अन्य मार्ग दौर, उत्तर में –

30

आप डिफ़ॉल्ट मानों के साथ तर्क का उपयोग कर सकते हैं।

def someMethod(def mandatory,def optional=null){} 

यदि तर्क "वैकल्पिक" मौजूद नहीं है, तो यह शून्य हो जाता है।

+0

यह पहले से ही उसने किया है। समस्या यह है कि डिफ़ॉल्ट मानों के साथ केवल अंतिम तर्क छोड़े जा सकते हैं। –

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