2015-12-31 5 views
14

मेरे पास दो विधियां हैं - नाम one और two। विधि oneList<Person> लेता है जहां person कुछ वर्ग और विधि twoPerson कक्षा की व्यक्तिगत वस्तुएं लेती है।व्यक्तिगत पैरामीटर के रूप में ऑब्जेक्ट्स की पास सूची

मैं को विधि two पर व्यक्तिगत ऑब्जेक्ट पैरामीटर के रूप में कैसे पास कर सकता हूं? List में 0 या 1 या अधिक तत्व हो सकते हैं और मैं null पास करना चाहता हूं यदि सूची में two विधि से आवश्यक सभी 3 पैराम नहीं हैं।

def one (List<Person> persons) { 

    // check the size of the list 
    // pass arguments to method two 

    // this works 
    two(persons[0], persons[1], persons[2]) 

    //what I want is 
    two(persons.each { it + ', '}) 
} 

def two (Person firstPerson, Person secondPerson, Person thirdPerson) { 

    // do something with the persons 
} 
+0

मैं पूंजीकृत पैरामीटर नाम का उपयोग करने से बचने यानी होगी 'व्यक्तियों:

// Spread operator "*" def one(List<Person> persons) { two(*persons) } // Variadic function "..." def two(Person... values) { values.each { person -> println person } } 

अब आपके पास दो विधि गुजर अशक्त, एक खाली सूची, या इस तरह के रूप व्यक्ति उदाहरणों में से किसी भी नंबर पर कॉल कर सकते हैं 'व्यक्तियों की बजाय '। राजधानियां आपको कभी-कभी दुःख का कारण बन सकती हैं, क्योंकि ग्रोवी कभी-कभी अनुमान लगा सकता है कि आप कक्षा –

+0

पर हैं, उदाहरण के साथ मेरा सही वर्ग नाम बदलते समय यह गलती को दोबारा प्रतिक्रिया दे रहा था। मैं इसे अपने दैनिक प्रोग्रामिंग में नहीं करता हूं। मैंने प्रश्न –

उत्तर

8

आप अपने फोन करने के लिए विधि प्रसार ऑपरेटर * उपयोग कर सकते हैं, लेकिन अपनी टिप्पणी के आधार पर "सूची 0 या 1 या अधिक तत्वों होते हैं" आप उपयोग करना चाहते जाएगा आपकी दूसरी विधि के लिए विविधता समारोह। इस प्रयास करें:

two(null) 
two([]) 
two(person1, person2, person3, person4, person5) 
11

उपयोग:

two(*persons) 

* सूची विभाजित है और अलग तर्क के रूप में अपनी तत्वों पारित करेंगे।

यह हो जाएगा:

def one (List<String> strings) { 
    two(strings[0], strings[1], strings[2]) 
    two(*strings) 
} 

def two (String firstPerson = null, String secondPerson = null, String thirdPerson = null) { 
    println firstPerson 
    println secondPerson 
    println thirdPerson 
} 

one(['a','b','c']) 
+2

अच्छा संपादित किया! यह लगभग सही है, लेकिन अगर केवल दो तर्क हैं तो क्या होगा? एक (['ए', 'बी'])। बिनियम एक लापता होने के रूप में शून्य होना चाहता है। सौभाग्य से, ग्रोवी में डिफ़ॉल्ट तर्क हैं, इसलिए पूरा समाधान दो होगा (स्ट्रिंग फर्स्टपर्सन = नल, स्ट्रिंग सेकंडपर्सन = नल, स्ट्रिंग थर्डपर्सन = नल) –

+0

@JakubDyszkiewicz, उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें। – Opal

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