私は自分のコードにバグを引き起こしましたが、それは自分が好きだったはずのバグを見つけるのが難しく、将来は避けたいと思っています。Scalaコンパイラーが私のエラーについて警告してくれると思っていました(何かが足りない場合を除いて)。
私はそれを些細なケースに減らしました:
Vector.maybeGetVector match {
case v:Vector => true
case _ => false
}
case class Vector(x:Int, y:Int)
object Vector {
def maybeGetVector : Option[Vector] = Some(new Vector(1,2))
}
wildcard
フォールスルーの代わりに使用した唯一の理由None
は、返されたのサブタイプにのみ一致させたいということですOption
。
最初のcaseステートメントに到達不能コードが含まれていることは簡単に推測できるため、コンパイラーの警告を期待していました。Option[Vector]
のサブタイプにすることはできませんVector
。
奇妙な部分は、次のcaseステートメントを追加した場合です。
case i:Int => false
エラーが発生し、それOption[Vector]
が必要であると通知されます。
命名規則の外で、この方法でプログラマーのエラーから保護する方法はありますか?と一致することができる唯一のものOption
はSome/None/null
です。明らかな何かが欠けているように感じます。