scala - What's the difference between these two calls to a function taking a collection of structural types? -


क्यों एफएन (इटरेटर ("एफयू") को कॉल संकलित करता है, लेकिन एफएन (फूइटरेटर) को कॉल एक त्रुटि " टाइप बेमेल; पाया: Iterator [java.lang.String] आवश्यक: scala.Iterator [com.banshee.Qx.HasLength] "

  वस्तु Qx { प्रकार हैसैलेन्थ = {डीएफ लंबाई: आईआईटी} डीएफ़ एफएन (एक्सएस: ईटरेटर [हैसैलिन्थ]) = 3 var टीएन = एफएन (ईटरेटर ("एफयू")) var एफयूइटरेटर = ईटरेटर ("एफयू") var टीएनएफल्स = एफएन (एफयूइटरेटर) /  

क्या वे एक ही चीज़ नहीं हैं?

यह परिशोधन के प्रतिनिधित्व में एक बग होना चाहिए, क्योंकि निम्न दो फार्मूलेशन दोनों काम करते हैं।

  वस्तु Qx1 {// लंबाई () दे दो), हालांकि इटरेटर परिभाषा उनके पास नहीं है HasLength = {def लंबाई (): int} def fn (xs: इटरेटर [हस लाइल]] = 3 var tn = fn (इटरेटर ("foo")) var fooIterator = Iterator ("foo") v एआर tnFails = fn (fooIterator) // संकलन नहीं करता है} वस्तु Qx2 {प्रकार HasLength = {def लंबाई: Int} def fn (xs: इटरेटर [HasLength]) = 3 var tn = fn (इटरेटर ("foo")) // टाइप इन्फरसर से पहले फूइटरेटर की व्याख्या कर सकते हैं फूइटरेटर गलत: inferator [HasLength] = Iterator ("foo") var tnFails = fn (fooIterator) // संकलित नहीं करता है}  

संपादित करें:

सुबह में बहुत जल्दी यह लंबाई () पद्धति के साथ स्ट्रिंग है, जिसके पास पैरों हैं, जिसका अर्थ है कि यह सही है और आप लंबाई और लंबाई () की सोच के लिए गलत हैं, उसी विधि हैं (यह एक अच्छा सा जाल है जिसे मैंने पहले दर्ज़ किया है।)


Comments