scala编译器应该为我在下面评论过的if语句生成警告,但事实并非如此。为什么呢?
sealed trait T
object A extends T
val s:Seq[T] = Seq(A)
val result = s.map {
//This if should produce a compiler warning
case a if(a == "A") =>
"First"
case a =>
//This if should produce a compiler warning
if (a == "A") {
"Second"
}
else
{
"Third"
}
}
结果将是您所期望的“第三”,但编译器应该在case a if(a == "A")
和if (a == "A")
上生成警告,但是没有警告。
如果我编写以下代码,它的行为就像我期望的那样:
if(A == "A"){
println("can't happen")
}
// warning: comparing values of types A.type and String using `==' will always yield false
为什么会这样?
编辑:我正在使用Scala 2.10.1。
答案 0 :(得分:1)
因为它可能发生。如果我只是保留一些内部状态并在第一次和第二次调用时返回==“A”的不同结果,那么我可以获得“第二次”。
您已经提供了A的定义,以确保它不会发生,但这需要检查整个程序,编译器警告只是本地的。
答案 1 :(得分:0)
愿你继承带有字符串参数的重载==
方法的类......