निम्नलिखित स्काला मामले वर्ग पर विचार करें:बड़े स्कैला केस कक्षाओं से पैटर्न कैसे पैटर्न करें?
case class WideLoad(a: String, b: Int, c: Float, d: ActorRef, e: Date)
पैटर्न मिलान मुझे अनुमति देता है एक क्षेत्र को निकालने और दूसरों को छोड़ दे, तो जैसे करने के लिए:
someVal match {
case WideLoad(_, _, _, d, _) => d ! SomeMessage(...)
}
मैं करना चाहते हैं क्या है, और क्या अधिक प्रासंगिक है जब है एक केस क्लास में ~ 20 विषम फ़ील्ड हैं, केवल कुछ मानों को निकालने के लिए है जिसमें WideLoad(_, _, _, _, _, some, _, _, _, thing, _, _, interesting)
टाइपिंग शामिल नहीं है। , कई _, _, _, _
someVal match {
case WideLoad(d = dActor) => dActor ! SomeMessage(...)
// ^---------- does not compile
}
कोई आशा यहाँ है, या मैं टाइपिंग बाहर कई अटक कर रहा हूँ:
मुझे उम्मीद थी नामित आर्ग यहाँ मदद कर सकता है, हालांकि निम्न सिंटैक्स काम नहीं करता है?
संपादित: मैं समझता हूँ कि मैं case wl @ WideLoad(...whatever...) => wl.d
कर सकते हैं, फिर भी मैं अभी भी सोच रहा हूँ भी terser वाक्यविन्यास लगा सकते हैं कि है कि क्या मैं एक अतिरिक्त val
लागू करने के लिए बिना की जरूरत है।
, सभी अंडरस्कोर यह बहुत पढ़ने के लिए कठिन बनाते हैं। एक नामित पैरामीटर सिंटैक्स पठनीयता को बहुत सुधार देगा, लेकिन जहां तक मुझे पता है कि ऐसा कुछ भी मौजूद नहीं है। –
मैं इस धारणा के तहत था कि सामान्य पैरामीटर सूचियां सामान्य रूप से बचने के लिए कुछ होती हैं। –
आपका मतलब वाइडलोड (डी == डीएक्टर) –