प्रकार A
के तत्वों और एक अन्य प्रकार A
में parametrised के साथ एक टपल को देखते हुए के बजाय सदस्य पहुँच का उपयोग करते हुए:अजीब प्रकार मेल नहीं खाता जब निकालने
trait Writer[-A] { def write(a: A): Unit }
case class Write[A](value: A, writer: Writer[A])
और एक उपयोग साइट:
trait Cache { def store[A](value: A, writer: Writer[A]): Unit }
क्यों टुपल के एक्स्ट्रेक्टर का उपयोग करके अपेक्षित कार्य के बाद:
def test1(set: Set[Write[_]], cache: Cache): Unit =
set.foreach {
case Write(value, writer) => cache.store(value, writer)
}
लेकिन निम्नलिखित में विफल रहता है:
def test2(set: Set[Write[_]], cache: Cache): Unit =
set.foreach { write =>
cache.store(write.value, write.writer)
}
त्रुटि संदेश के साथ
found : Writer[_$1] where type _$1
required: Writer[Any]
cache.store(write.value, write.writer)
^
मैं दूसरा रूप (test2
) ठीक से संकलित करने के लिए तय कर सकते हैं?
संपादित
ओवेन द्वारा विचारों मैं बाहर की कोशिश की से प्रस्थान करता है, तो मैं यह सब पर पैटर्न मिलान के बिना काम (जो है जो मैं पहली जगह में करना चाहता था) बना सकते हैं।
// does not work
def test3(set: Set[Write[_]], cache: Cache): Unit = {
def process[A](write: Write[A]): Unit =
cache.store(write.value, write.writer)
set.foreach(process)
}
// _does work_
def test4(set: Set[Write[_]], cache: Cache): Unit = {
def process[A](write: Write[A]): Unit =
cache.store(write.value, write.writer)
set.foreach(w => process(w))
}
फिर भी सुंदर मेरे लिए अस्पष्ट ...
स्पष्टीकरण के लिए धन्यवाद। आपका पहला समाधान लागू नहीं है, क्योंकि प्रत्येक लेखन में एक अलग प्रकार का पैरामीटर होगा। आपका दूसरा समाधान व्यवहार्य है। –
मैं अभी भी वास्तव में समझ में नहीं आता कि क्या हो रहा है। प्रश्न में मेरा संपादन देखें। यही कारण है कि मैं थोड़ा और सवाल खोलने के लिए पसंद करता हूं। –