में सार प्रकार का उपयोग मैं निम्नलिखित कोड है कहो। वर्ग Bar
, उदाहरण के लिएस्ट्रक्चरल टाइपिंग:</p> <pre><code>class Bar { def bar(b:Bar):Boolean = true } def func(b:Bar) = b.bar(b) </code></pre> <p>ऊपर ठीक काम करता है: शोधन
class Foo { def bar(f:Foo):Boolean = false }
इसके बजाय ऐसे प्रत्येक वर्ग के लिए func
लेखन की एक 3 पार्टी पुस्तकालय में परिभाषित किया गया है और वहाँ कई समान कक्षाएं, एक bar
विधि के साथ प्रत्येक रहे हैं, मैं सामान्य प्रकार B
का उपयोग कर func
परिभाषित करना चाहते हैं जब तक इसमें सही हस्ताक्षर की bar
विधि है।
मैंने कोशिश की निम्नलिखित लेकिन यह मुझे एक त्रुटि देता है:
def func[B <: {def bar(a:B):Boolean}](b:B) = b.bar(b) // gives error
त्रुटि मैं मिलता है:
<console>:16: error: Parameter type in structural refinement may not refer to
an abstract type defined outside that refinement
def func[B <: {def bar(a:B):Boolean}](b:B) = b.bar(b)
^
हालांकि, अगर मैं निम्नलिखित, विधि परिभाषा काम करता है लेकिन ऐसा मंगलाचरण देता है एक त्रुटि:
def func[B <: {def bar(a:Any):Boolean}](b:B) = b.bar(b)
func(new Bar)
<console>:10: error: type mismatch;
found : Bar
required: B
func(new Bar)
^
वहाँके कोड को बदले बिना मैं क्या चाहते करने के लिए कोई रास्ता नहीं है?