कहते हैं कि हम निम्न दो लक्षण है:स्काला दृश्य आवेदन पहेली
val bar = new Bar {}
val stuff = List(1, 2, 3)
अब मैं काम करने के लिए निम्न उम्मीद थी:
bar howMany stuff
लेकिन यह नहीं है:
दृश्य तीन स्थितियों में लागू होते हैं:
scala> bar howMany stuff <console>:13: error: type mismatch; found : List[Int] required: List[A] bar howMany stuff ^
तो हम the spec करने के लिए जाना है, जो इस में क्या कहना है (बोल्ड अक्षरों में जोर मेरा है) ।
[यहाँ प्रासंगिक नहीं है।]
एक चयन में उन्हेंसाथ ई प्रकार टी, की अगर चयनकर्ता मीटरके एक सदस्य को निरूपित नहीं है टी। इस मामले में, एक दृश्य v खोजा गया है जो ई पर लागू होता है और जिसके परिणामस्वरूप मीटर नामक सदस्य होता है। अंतर्निहित पैरामीटर के मामले में खोज की आय, जहां अंतर्निहित दायरा टी में से एक है। यदि ऐसा कोई दृश्य मिलता है, तो चयन ई.एम को v (e) .m में परिवर्तित किया गया है।
एक चयन में उन्हें (args)साथ ई प्रकार टी, की अगर चयनकर्ता मीटरके कुछ सदस्य (सदस्यों) टी को दर्शाता है, लेकिन इन सदस्यों में से कोई भी के लिए लागू है तर्क तर्क। इस मामले में एक दृश्य के वी जो करने के लिए ई लागू है खोजा जाता है और जिसका परिणाम एक विधि मीटर जो आर्ग के लिए लागू होता है। खोज के मामले में अंतर्निहित पैरामीटर के मामले में होती है, जहां अंतर्निहित दायरा टी में से एक है। यदि इस तरह का एक दृश्य मिलता है, तो चयन ई.एम को v (e) .m (args) में परिवर्तित किया गया है।
तो हम निम्नलिखित की कोशिश, यह सोच कर यह काम करने के लिए भी बेतुका होना चाहिए:
trait Foo[A] { def howMany(xs: List[A]) = xs.size }
trait Bar { def howMany = throw new Exception("I don't do anything!") }
implicit def bar2foo[A](bar: Bar) = new Foo[A] {}
val bar = new Bar {}
val stuff = List(1, 2, 3)
लेकिन यह (दोनों 2.9.2 और 2.10.0-RC2 पर, कम से कम) करता है :
scala> bar howMany stuff
res0: Int = 3
यह वास्तव में कुछ अजीब व्यवहार की ओर जाता है this problem के लिए this workaround में उदाहरण के लिए के रूप में।
मैं तीन (निकट से संबंधित) प्रश्न हैं:
- वहाँ एक सीधा रास्ता नहीं है (यानी, एक है कि उचित नाम के साथ नकली विधियां जोड़ने शामिल नहीं है) दृश्य मूल में सही ढंग से लागू करने के लिए उपरोक्त मामला?
- क्या कोई इस व्यवहार के लिए जिम्मेदार नमूना पढ़ सकता है?
- मान लीजिए यह इरादा व्यवहार है, क्या यह कोई समझ में आता है?
मैं इस मुद्दे की पिछली चर्चाओं के किसी भी लिंक की भी सराहना करता हूं- मुझे Google के साथ बहुत भाग्य नहीं मिला है।
यह उस विशेष सरलीकृत मामले में काम करता है, लेकिन आम तौर पर मुझे प्रश्न में जुड़े स्कालज़ समस्या के लिए कामकाज में 'ए' की परवाह है। –