我正在做一些案例類的匹配,並希望以相同的方式處理兩個案例。事情是這樣的: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