मैं एकाधिक पैरामीटर केस क्लास के मिलान में उपयोग के लिए एक निकालने वाला (ओं) लिखने का प्रयास कर रहा हूं। सरलीकृत उदाहरण:स्कैला - निकालने वाला अपर्याप्त भ्रम
case class X(p1: String, p2: Int)
मैं हर निकालने वस्तुओं चाहते हैं p1 के लिए एक निश्चित मूल्य को परिभाषित करने के लिए, और p2 उपयोग पर परिभाषित किया गया है। (ए, बी, आदि नहीं एक मामले वर्ग और उपवर्ग X हो सकता है, और मैं भी एक मामले के रूप में उपयोग करने के लिए एक्स (,) चाहते हैं) उदाहरण विधि लागू साथ:
object A {
def apply(p2: Int): X = X("A", p2)
}
object B {
def apply(p2: Int): X = X("B", p2)
}
...
पैटर्न मिलान के लिए, मैं इस तरह से मिलान करने के लिए उन्हें चाहते हैं:
X("A", 2) match {
case A(2) => true // <- should match: p1="A" and p2=2
case A(_) => true // <- should match: p1="A" and p2=_
case X("A", _) => true // <- should match: p1="A" and p2=_
case A(1) => false // <- should not match
case B(2) => false // <- should not match: p1="B" and p2=2
}
मैं मैं A
, B
, आदि में unapply
विधि परिभाषित करने की जरूरत है, लेकिन मैं अच्छी तरह से उलझन में क्या हस्ताक्षर और तर्क होना चाहिए हूँ:
object A {
def unapply(x: ???): Option[???] = {
???
}
}
सहायता, कृपया?
पहले उदाहरण में, मैं अक्सर PartialFunction का उपयोग '। एक अपरिवर्तनीय के डिफ़ॉल्ट मामले को लिखने से बचने के लिए condopt (यहां: 'PartialFunction.condOpt (लक्ष्य) {केस एक्स ("ए", पी 2) => कुछ (पी 2)} '; आप' PartialFunction._' भी आयात कर सकते हैं)। – Nicolas
मुझे यह नहीं पता था। बहुत बढ़िया! –
इतना आसान! धन्यवाद! बीटीडब्ल्यू मुझे पता है कि इस उदाहरण को लिखा जा सकता है, लेकिन यह उदाहरण सरलीकृत है। निकालने वालों का मुख्य उद्देश्य उन पैरामीटर संयोजनों को समाहित करना है जिन्हें आसानी से याद नहीं किया जाता है। – 7zark7