मैं तरह के मामले वर्ग है निम्नलिखित:स्काला बतख टाइपिंग पैटर्न मिलान
// parent class
sealed abstract class Exp()
// the case classes I want to match have compatible constructors
case class A (a : Exp, b : Exp) extends Exp
case class B (a : Exp, b : Exp) extends Exp
case class C (a : Exp, b : Exp) extends Exp
// there are other case classes extending Exp that have incompatible constructor, e.g.
// case class D (a : Exp) extends Exp
// case class E() extends Exp
// I don't want to match them
मैं मिलान करना चाहते हैं:
var n : Exp = ...
n match {
...
case e @ A (a, b) =>
foo(e, a)
foo(e, b)
case e @ B (a, b) =>
foo(e, a)
foo(e, b)
case e @ C (a, b) =>
foo(e, a)
foo(e, b)
...
}
def foo(e : Exp, abc : Exp) { ... }
वहाँ मर्ज करने के लिए एक तरीका है कि एक ही मामले में तीन मामलों (ए, बी, सी में एक मध्यवर्ती मूल वर्ग जोड़ने के बिना)? मैं ए, बी, सी, या एक्सप की परिभाषा नहीं बदल सकता। किसी प्रकार का:
var n : Exp = ...
n match {
...
case e @ (A | B | C) (a, b) => // invalid syntax
foo(e, a)
foo(e, b)
...
}
जो स्पष्ट रूप से काम नहीं करता है, और न तो कार्य करें:
var n : Exp = ...
n match {
...
case e @ (A (a, b) | B (a, b) | C (a, b)) => // type error
foo(e, a)
foo(e, b)
...
}