不混那么好: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