मैं एक श्रेणी पदानुक्रम तैयार कर रहा हूं, जिसमें कई लक्षणों के साथ बेस क्लास शामिल है। बेस क्लास कई विधियों के डिफ़ॉल्ट कार्यान्वयन प्रदान करता है, और गुण abstract override
के माध्यम से कुछ तरीकों को चुनिंदा रूप से ओवरराइड करते हैं, ताकि स्टैकेबल गुण/मिश्रण के रूप में कार्य किया जा सके।अंतर्निहित "कन्स्ट्रक्टर पैरामीटर" के रूप में लक्षणों की घोषणा कैसे करें?
एक डिजाइन परिप्रेक्ष्य यह अच्छी तरह से काम करता है, और डोमेन के लिए नक्शे से इतना है कि मैं मैं यहाँ से (एक विशेषता) आदि एक विधेय यहां से (एक और विशेषता)
के साथ एक छानने समारोह में जोड़ सकते हैं हालांकि, अब निहित मानकों को लेने के लिए मेरे कुछ लक्षणों की तरह है। मुझे खुशी है कि यह अभी भी एक डिजाइन परिप्रेक्ष्य से समझ में आता है, और अभ्यास में भ्रमित साबित नहीं होगा। हालांकि, मैं इसके साथ चलाने के लिए संकलक को मनाने के लिए मना नहीं कर सकता।
समस्या का मूल यह प्रतीत होता है कि मैं एक विशेषता के लिए कन्स्ट्रक्टर तर्क प्रदान नहीं कर सकता, जैसे कि उन्हें अंतर्निहित चिह्नित किया जा सकता है। एक विधि कार्यान्वयन के भीतर अंतर्निहित पैरामीटर का संदर्भ अपेक्षित "अनुमानित मूल्य नहीं मिला" संदेश के साथ संकलित करने में विफल रहता है; मैं के माध्यम से
implicit val e = implicitly[ClassName]
विधि के भीतर उपलब्ध होने के "प्रचार" करने के लिए निर्माण मंच (जहां, व्यवहार में, यह दायरे में हमेशा) से निहित कोशिश की, लेकिन (कोई संदेह नहीं है के रूप में आप में से कई की उम्मीद) कि परिभाषा एक ही संदेश के साथ विफल रहा।
ऐसा लगता है कि समस्या यह है कि मैं implicit ClassName
ध्वज के साथ विशेषता के हस्ताक्षर को टैग करने के लिए संकलक को मनाने के लिए संकलित नहीं कर सकता, और निहित प्रदान करने के लिए कॉलर्स (यानी जो वस्तु को गुण में मिलाते हैं) । वर्तमान में मेरे कॉलर ऐसा कर रहे हैं, लेकिन संकलक इस स्तर पर जांच नहीं कर रहा है।
वहाँ किसी भी तरह से कुछ implicits निर्माण समय पर उपलब्ध हो की आवश्यकता होती है के रूप में एक विशेषता चिह्नित करने के लिए है?
क्या कॉलर स्पष्ट रूप से अज्ञात वस्तु में 'implWrap' को परिभाषित नहीं करता है, क्योंकि यह विशेषता में एक सार क्षेत्र है? (यदि नहीं, तो मुझे समझ में नहीं आता कि यह कैसे सेट किया गया है; क्या आप समझाएंगे?) –
हां, लेकिन टिप्पणी देखें: यदि वह अंतर्निहित उपयोग करना चाहता है, तो वह केवल 'वैल इंप्रास्ट्रैप = क्लासनाम' लिख सकता है। मुझे ऐसा करने का एक अच्छा तरीका नहीं दिख रहा है: जैसा कि आप इस प्रश्न में उल्लेख करते हैं, लक्षणों में _any_ कन्स्ट्रक्टर पैरामीटर नहीं हैं (जिन्हें अंतर्निहित चिह्नित किया जा सकता है)। –
बेशक, मैं एक बेहतर समाधान देखने में बहुत खुश हूं। –