不混那麼好:case類,模式匹配和斯卡拉
abstract class A
case class B (var a: Int)(var b: String) extends A
case class C extends A
下將無法正常工作:
B(1)("1") match {
case B(a)(b) => print("B")
case C() => print("C")
}
的問題是,模式匹配和curried的論點似乎並不奏效。有沒有解決這個問題的方法?
你的第一個例子可以工作,但是我不能在case語句中訪問B.a和B.b,而不做一些醜陋的類型轉換。另外,在你的編輯中,我不確定我是否理解爲什麼構造函數模式沒有被粘貼。是因爲不適用? –
說實話,我不知道它爲什麼起作用。我通過反覆試驗偶然發現了它。這絕對是在Scala規範中的某處提到的。如果它與您的案例相關,您可能想查看它。 – agilesteel
是的,您在case語句中使用的模式是由unapply函數的結果給出的模式。它永遠不會被咖喱。 scala規範中的相應部分是§8.1.8 – Nicolas