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"
}
}
結果は予想どおり「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 を使用しています。