वे पाते हैं कि अच्छी तरह से मिश्रण प्रतीत नहीं:प्रकरण कक्षाएं, पैटर्न मिलान और स्काला
abstract class A
case class B (var a: Int)(var b: String) extends A
case class C extends A
निम्नलिखित कार्य नहीं करेगा:
B(1)("1") match {
case B(a)(b) => print("B")
case C() => print("C")
}
समस्या यह है कि पैटर्न मिलान है और करीबी तर्क काम नहीं कर रहे हैं। क्या इसके आसपास कोई कार्य है?
आपका पहला उदाहरण काम करेगा, लेकिन मैं कुछ बदसूरत टाइपकास्टिंग किए बिना केस स्टेटमेंट में बीए और बीबी तक पहुंच नहीं पाएगा। साथ ही, आपके संपादन में, मुझे यकीन नहीं है कि मैं समझता हूं कि कन्स्ट्रक्टर पैटर्न क्यों नहीं है। क्या यह अनुपयोगी है? –
ईमानदार होने के लिए मुझे नहीं पता कि यह क्यों काम करता है। मैं परीक्षण और त्रुटि के माध्यम से इसे ठोकर खाई। यह स्काला विनिर्देशन में कहीं निश्चित रूप से उल्लेख किया गया है। यदि आप अपने मामले में प्रासंगिक हैं तो आप इसे देखना चाहेंगे। – agilesteel
हां, एक केस स्टेटमेंट में आपके द्वारा उपयोग किए जाने वाले पैटर्न को अनुपयुक्त फ़ंक्शन के परिणामस्वरूप दिया गया है। यह कभी नहीं किया जा सकता है। स्कैला विनिर्देश में संबंधित खंड §8.1.8 – Nicolas