6

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 を使用しています。

4

2 に答える 2