scala - Accessing members of mixin traits -
मेरे पास स्केल में निम्नलिखित कोड है:
विशेषता A {val foo: String = & gt; Int = {in = & gt; In.toInt}} विशेषता बी एक {def बार (a: स्ट्रिंग) = {foo (a)}} वर्ग C (a: स्ट्रिंग) {self: B = & gt; x
के शुरू होने के दौरान मुझे एनपीई मिल रहा है I
के साथ val b = bar (a)} val x = नया C ("34")
संपादित करें
नोट : यह समझ नहीं आ रहा कि क्यों foo
ए
का गुण प्रारंभ नहीं होता
कृपया देखें
इसका एकमात्र अतिरिक्त यह है कि स्वयं-प्रकार वर्ग सी सार बना देता है। तो वास्तव में आप ऐसा करते हैं:
सारिणी वर्ग C (a: स्ट्रिंग) {def बार (a: स्ट्रिंग): Int val b = bar (a)} val x = new c ("34" ) बी के साथ
आप इसे अपने कोड में बदलने का प्रयास कर सकते हैं और उसी परिणाम को देख सकते हैं। कुछ और जानकारी
संक्षेप में: बी के साथ नए सी के लाइनरीकरण हो जाएगा (बी एंड एलटी; - ए) & lt; - सी, तो आजीविका है सी -> (ए -> बी)। कृपया अनुभाग देखें:
सुपरक्लाइस कन्स्ट्रक्टर निष्पादित होने के बाद, प्रत्येक मिक्सिन विशेषता के लिए कंसल्टेंट्स को निष्पादित किया जाता है। चूंकि उन्हें रैखिकरण के भीतर सही-से-बाएं क्रम में क्रियान्वित किया जाता है, लेकिन लक्षणों के क्रम को उलटकर लाइनरिएजेशन बनाया जाता है, इसका मतलब है कि मिक्सन के गुणों के लिए कंसल्टर्स निष्पादित किए जाते हैं ताकि वे कक्षा के लिए घोषणा में प्रकट हों । याद रखें, हालांकि, जब मिक्सिक्स पदानुक्रम को साझा करते हैं, तो निष्पादन का क्रम उतना ही नहीं हो सकता है, जब मिक्सिन घोषणा में प्रकट होते हैं।
आपके मामले में नया सी ("34") बी के साथ
बराबर से वर्ग K विस्तारित C ("34") बी के साथ; नया के
। ध्यान दें कि वर्ग सी का स्वयं प्रकार प्रारंभिक आदेश को प्रभावित नहीं करता है।
सरल उदाहरण:
scala & gt; विशेषता सी {डीईएफ़ ए: स्ट्रिंग; Println ("सी: $ एए")} परिभाषित विशेषता सी स्कला & gt; विशेषता डी {वाल एए = "एए"; Println ("डी: $ एए")} परिभाषित विशेषता डी स्कला & gt; समाधान: यदि आपका फ़ू थर्ड पार्टी लाइब्रेरी में रखा गया है (इसलिए आप इसे नहीं बना सकते हैं: डीसी के साथ नया सी: रिक्त डी: एआर 1 9: सी डी = $ एन $ 1 @ 2b740b6
समाधान: आलसी), तो आप स्वयं-प्रकार के बजाय केवल-मिश्रण का उपयोग कर सकते हैं या कम से कम सी कक्षा में ए बना सकते हैं:
विशेषता A {val foo: String = & gt; Int = {in = & gt; In.toInt}} गुण बी विस्तारित करता है {def बार (a: स्ट्रिंग) = {foo (a)}} वर्ग सी (ए: स्ट्रिंग) एक {self: B = & gt; Val b = बार (a)} val x = नया सी ("34") बी
Comments
Post a Comment