我正在做一些案例类的匹配,并希望以相同的方式处理两个案例。事情是这样的:scala中匹配多个案例类
abstract class Foo
case class A extends Foo
case class B(s:String) extends Foo
case class C(s:String) extends Foo
def matcher(l: Foo): String = {
l match {
case A() => "A"
case B(sb) | C(sc) => "B"
case _ => "default"
}
}
但是当我这样做,我得到的错误:
(fragment of test.scala):10: error: illegal variable in pattern alternative
case B(sb) | C(sc) => "B"
我能得到它的工作,我从B和C的定义中删除了参数,但我怎么能比得上与参数?
虽然我的示例没有显示它,但我需要这些参数。看起来我只需要使用一个对象。谢谢! – timdisney 2009-12-03 07:01:21
scala不允许“case A(aString)| case B(aString)=> println(aString)”吗?似乎只要A和B的类型相同,就应该允许。你的最后一个例子似乎最好不要复制B和C的情况。 – 2011-11-09 01:18:34
我会再给你一个。我认为有'案例A(x)|'会很好B(x)=> println(x)'在'x'的类型被设置为类型系统中无论A(x)和B(x)产生的上界的情况下都允许。 – 2011-11-10 17:24:55