所以我有以下代码。根据{{3}},此代码不应该编译。
稳定标识符模式是稳定标识符r。 r的类型必须符合模式的预期类型。
那为什么要编译?预期的类型显然是Bar
。这是scalac中的错误吗?
object Test {
def foo (b: Bar, a: A) = {
b match {
case `a` => println("A")
case _ => println(":(")
}
}
class A
case class Bar(s: String)
}
答案 0 :(得分:1)
你可以这样做(仅用于演示目的,永远不要再这样做):
object Test {
def foo (b: Bar, a: A) = {
b match {
case `a` => println("A")
case _ => println(":(")
}
}
class A
case class Bar(s: String)
}
class B extends A {
override def equals(other: Any) = true
}
Test.foo(Test.Bar("S"), new B)
我没想到它会起作用,但会打印A
类B
可以在任何地方定义,因此编译器无法确定此案例匹配是否错误,除非A
是最终的