में डिफ़ॉल्ट मानों के साथ पैरामीटर नामित किया गया है क्या यह groovy में डिफ़ॉल्ट मानों के साथ पैरामीटर नामित करना संभव है? मेरी योजना एक प्रकार का ऑब्जेक्ट फैक्ट्री बनाना है, जिसे डिफ़ॉल्ट मानों के साथ ऑब्जेक्ट प्राप्त करने के लिए बिल्कुल कोई तर्क नहीं कहा जा सकता है। साथ ही, मुझे ऑब्जेक्ट के लिए किसी भी पैरा को स्पष्ट रूप से सेट करने की कार्यक्षमता की आवश्यकता होगी। मेरा मानना है कि उदाहरण के लिए, पायथन कीवर्ड तर्कों के साथ यह संभव है।groovy
कोड मैं अभी के साथ प्रयास कर रहा हूँ की तरह
नीचे// Factory method
def createFoo(name='John Doe', age=51, address='High Street 11') {
return new Foo(name, age, address)
}
// Calls
Foo foo1 = createFoo() // Create Foo with default values
Foo foo2 = createFoo(age:21) // Create Foo where age param differs from defaut
Foo foo3 = createFoo(name:'Jane', address:'Low Street 11') // You get the picture
// + any other combination available
वास्तविक और एप्लिकेशन है कि मैं पर काम कर रहा हूँ मापदंडों के एक बहुत अधिक होगा इस प्रकार एक बहुत अधिक संयोजन की जरूरत कुछ है।
धन्यवाद
अद्यतन:
कारखाने विधि मैं योजना बना रहा हूँ परीक्षण के लिए है। वास्तव में वास्तविक फू क्लास को स्पर्श नहीं कर सकता है और विशेष रूप से यह डिफ़ॉल्ट मान नहीं है।
@dmahapatro और @codelarks answere नीचे एक मानचित्र के रूप में एक मानचित्र का उपयोग करने में एक अच्छा बिंदु था जिसने मुझे एक संभावित समाधान का विचार दिया। मैं वांछित चूक के साथ एक नक्शा बना सकता हूं और आवश्यक मूल्यों को ओवरराइड कर सकता हूं, और फैक्ट्री विधि को पास कर सकता हूं। यह शायद नौकरी करेगा और मैं इसके साथ जाऊंगा, जब तक कि मुझे बेहतर दृष्टिकोण का संकेत न मिले।
नीचे
defaults = [ name:'john', age:61, address:'High Street']
@ToString(includeFields = true, includeNames = true)
class Foo {
// Can't touch this :)
def name = ''
def age = 0
def address = ''
}
def createFoo(Map params) {
return new Foo(params)
}
println createFoo(defaults)
println createFoo(defaults << [age:21])
println createFoo(defaults << [ name:'Jane', address:'Low Street'])
नोट मेरे वर्तमान दृष्टिकोण: leftShift आपरेशन (< <) मूल नक्शा संशोधित करता है, तो ऊपर के उदाहरण उम्र के साथ-साथ पिछले विधि कॉल में 21 हो जाएगा। मेरे मामले में, यह कोई समस्या नहीं है क्योंकि सेटअप विधि में डिफ़ॉल्ट मानचित्र हर बार ताजा बनाया जा सकता है।
ऐसा नहीं कर सकते हैं। इस मामले में 'डिफ़ॉल्ट' राज्य बनाए रखता है। इसे स्थानीय बनाओ। मेरा अपडेट देखें। – dmahapatro
मुझे एहसास हुआ कि, इसलिए मेरे अपडेट में नोट। वैसे भी, डिफ़ॉल्ट के लिए फ़ंक्शन स्थानीय मानचित्र का उपयोग करना एक बेहतर तरीका है। पारितोषिक के लिए धन्यवाद। – kaskelotti