मुझे स्कैला में अपरिवर्तनीय प्रधानाध्यापकों के साथ रहने के लिए सीखने में बहुत सारी समस्याएं चलती हैं, जिनमें से एक प्रश्न में वस्तु से क्लोनिंग (या बल्कि व्युत्पन्न) की अवधारणा है।अपरिवर्तनीय कक्षाएं और लक्षण?
इन समस्याओं में से एक लक्षण में मिश्रित की अवधारणा है - उदाहरण के
trait helper //modifies some kind behavior.. assume we want to to continue down the line
class A (val x:int) {
def add(y:int) = new A(x + y)
}
Example extends App {
val a =new A(5) with helper
val b = a.add(10) // mixed trait disappears
}
अब यह एक अधिक जटिल समस्या मैं पहले से ही विभिन्न कक्षाओं, कारखाने तरीकों को छिपाने के लिए चारों ओर आज का निर्माण किया था की सिर्फ एक सच में सरल संस्करण है कक्षा ए, आदि। यदि हम केवल एक विशेषता से निपट रहे हैं, तो मुझे पता है कि मैं बस इसके लिए परीक्षण कर सकता हूं और इसे आवश्यकतानुसार भेज सकता हूं। लेकिन 3 या अधिक लक्षणों के ऊपर मौजूद होने पर मैं क्या कर सकता हूं? मुझे उन सभी संयोजनों का परीक्षण करना होगा जो अवास्तविक हैं।
कार्यात्मक डिज़ाइन प्रिंसिपल का पालन करते समय आप विभिन्न गुणों के साथ एक मौजूदा ऑब्जेक्ट को तत्काल (क्लोन) कैसे करते हैं और/या इसके कुछ पहलू को संशोधित करते हैं?
बहुत धन्यवाद, - टिम
यह बिल्कुल सरल नहीं है! यह एक प्रमुख कारण है कि मैं केक पैटर्न से बचने की कोशिश क्यों करता हूं - एक ही केक को फिर से बनाना वास्तव में मुश्किल है, खासकर अगर आप फ्लाई पर केक बनाते हैं। यह आमतौर पर आसान होता है यदि व्यवहार को संशोधित करने वाली चीज डेटा है (उदाहरण के लिए कक्षा में 'वैल', शायद निर्माता में)। –
मैं सहमत हूं और दुख की बात है कि मैं विशेषता सजावट पैटर्न से भी क्यों बचता हूं ... यह एक किताब में बहुत अच्छा लग रहा है, लेकिन अकादमिक किताबें कभी भी इस बात को संबोधित नहीं करतीं कि ऑब्जेक्ट को क्लोन करने के बाद मैंने यहां बताया है। – LaloInDublin
आपको मूल रूप से ऑब्जेक्ट के लिए एक निर्माता बनाना है, जो हर बार जब आप विशेषता में मिश्रण करना चाहते हैं तो बॉयलरप्लेट की एक और तीन या चार पंक्तियां (जब मैं इसे करता हूं) जोड़ता हूं। कभी-कभी यह अभी भी इसके लायक है। अक्सर यह नहीं है। –