मैं जानना चाहता हूं कि केस कक्षाओं की प्रति विधि को सारणी बनाना संभव है या नहीं। असल में मेरे पास sealed trait Op
और कुछ case class Push(value: Int) extends Op
और case class Pop() extends Op
जैसे कुछ है।केस क्लास कॉपी() विधि abstraction
पहली समस्या: बिना तर्क/सदस्यों के केस केस एक प्रति विधि परिभाषित नहीं करता है। आप आरईपीएल में कोशिश कर सकते हैं।
scala> case class Foo()
defined class Foo
scala> Foo().copy()
<console>:8: error: value copy is not a member of Foo
Foo().copy()
^
scala> case class Foo(x: Int)
defined class Foo
scala> Foo(0).copy()
res1: Foo = Foo(0)
क्या कोई कारण है कि संकलक इस अपवाद को बनाता है? मुझे लगता है कि यह अपेक्षाकृत असंभव है और मैं प्रत्येक केस क्लास की प्रतिलिपि विधि को परिभाषित करने की अपेक्षा करता हूं।
दूसरी समस्या: मेरे पास एक विधि def ops: List[Op]
है और मैं ops map { _.copy() }
जैसे सभी ऑप्स कॉपी करना चाहता हूं। मैं Op
विशेषता में प्रतिलिपि विधि को कैसे परिभाषित करूं? अगर मैं def copy(): Op
कहता हूं तो मुझे "बहुत अधिक तर्क" त्रुटि मिलती है। हालांकि, चूंकि सभी प्रतिलिपि() विधियों में केवल वैकल्पिक तर्क हैं: यह गलत क्यों है? और, मैं यह कैसे सही करूं? def clone(): Op
नामक एक और विधि बनाकर और सभी केस कक्षाओं के लिए def clone() = copy()
लिखें? मुझे आशा नहीं है।
आपके प्रश्न का उत्तर, "केस वर्गों की प्रति विधि को सारणी बनाना संभव है", आपके प्रश्न के अन्य पहलुओं को अनदेखा करना है: हां। आप लेंस नामक अवधारणा को देखना चाहते हैं। स्कैला और स्कालाज़ में लेंस पर एडवर्ड Kmett द्वारा एक शानदार वीडियो है एक पुस्तकालय है जो उन्हें एक बहुत समृद्ध पुस्तकालय के रूप में लागू करता है। एक कंपाइलर प्लगइन (लेंस) भी है जो इसे हस्तलेखन के बजाय आवश्यक बॉयलरप्लेट उत्पन्न करता है। उम्मीद है कि scalamacros.org जल्द ही इसे कम कर देगा। –