Passing dependent objects to a parent constructor in Scala -


मान लीजिए मेरे पास निम्न श्रेणी के उत्तराधिकार हैं:

  class A () वर्ग बी (a : ए) कक्षा सी (बी: बी) वर्ग बेस क्लास (बी: बी, सी: सी)  

अब मैं बेस क्लास के उपवर्ग को लागू करना चाहता हूं, जिसे ए का एक उदाहरण दिया गया है, और यह अपने सुपरक्लास कंस्ट्रक्टर से गुजरती बी और सी के उदाहरणों का निर्माण करती है।

यदि मैं मनमानी अभिव्यक्ति का इस्तेमाल कर सकता हूं, तो मैं ऐसा कुछ करूँगा:

  b = नया बी (ए) सी = नया सी (बी) सुपर (बी, सी)  

क्योंकि द्वितीयक निर्माता के द्वितीय तर्क पहली तर्क के मूल्य पर निर्भर करता है, हालांकि, मैं

  वर्ग इंटरमीडिएट शूक्लस (बी: बी) बेस क्लास (बी, नया सी (बी) का विस्तार करता है, ऐसा कोई भी फ़ैक्ट्री फ़ंक्शन उपयोग किए बिना, या नि: ) कक्षा रियलशब्बल (ए: ए) इंटरमीडिएटसब्सेलैस (नया बी (ए)) का विस्तार करता है  

क्या ऐसा करने के लिए कोई स्वच्छ तरीका है?

शायद संभाल करने का सबसे अच्छा तरीका इस प्रकार की स्थिति आपको बेसक्लास के उप-कक्षा के लिए साथी ऑब्जेक्ट में एक फ़ैक्टरी पद्धति लिखकर लिखना चाहती है।

  वर्ग ए () वर्ग बी (ए: ए) वर्ग सी (बी: बी) क्लास बेसक्लास (बी: बी, सी: सी) क्लास एसबीसी प्राइवेट (ए: ए, बी: बी, सी: सी) बेसक्लास (बी, सी) ऑब्जेक्ट एसबीसी (डीएफएफ) लागू होता है (ए: ए): एसबीसी = Val b = new b (a) val c = new c (b) new sbc (a, b, c)}}  

आप उन कंसट्रक्टर पैरामीटर में से किसी को प्रभावित किए बिना क्षेत्रों में बना सकते हैं कुछ भी ( val के साथ prefixing करके, अगर आप उस वाक्यविन्यास से परिचित नहीं हैं):

  वर्ग ए () वर्ग बी (वैल ए: ए) वर्ग सी ( वेल बी: बी) क्लास बेस क्लास (वेल बी: बी, वेल सी: सी) क्लास एसबीसी प्राइवेट (वैल ए: ए, बी: बी, सी: सी) बेसक्लास (बी, सी) ऑब्जेक्ट एसबीसी (डीएफएफ) लागू होता है (ए: ए): एसबीसी = {val बी = नया बी (ए) वल सी = नया सी (बी) नया एसबीसी (ए, बी, सी)}}   

अब <कोड का नया उदाहरण > एसबीसी इस प्रकार की अभिव्यक्ति के साथ बनाया जा सकता है: एसबीसी (एवल्यू) (चाहे val s का उपयोग किया जाता है या नहीं)।

  scala & gt; वाल ए 1 = नया ए ए 1: ए = ए @ 14 ए 8 एफ44 स्केल & gt; वैल एसबीसी 1 = एसबीसी (ए 1) एसबीसी 1: एसबीसी = एसबीसी @ 7 डी 8 बीबी स्कला & gt; Sbc1.a res0: ए = ए @ 14 ए 8f44 स्केल & gt; Sbc1.b res1: B = B @ c7272 स्केल & gt; Sbc1.c res2: C = C @ 178743b  

Comments