我在我的代码中造成了一个更难找到我想要的错误,以及我希望将来避免的错误。我希望 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]
是必需的。
在命名约定之外,有没有办法以这种方式防止程序员错误。唯一可以与 an 匹配的东西Option
是Some/None/null
。我觉得我错过了一些明显的东西。