考虑以下损坏的功能:
def sum (list : Seq[Int]) : Int = list match {
case Nil => 0
case head :: tail => head + sum(tail)
}
在这里,该函数应该与 a 一起使用List[Int]
,但被重构为接受Seq[Int]
,因此在编译器没有注意到的情况下被破坏。
Scala 不完整的模式匹配检测中的这个巨大漏洞使它几乎毫无用处。
我想有一种系统地检测这些问题的方法。具体来说,我希望编译器在每个instanceof
-guided 模式匹配上发出错误/警告,即我只想允许在密封层次结构和自定义匹配器上进行模式匹配。
是否存在用于对模式匹配安全性进行保守(而不是任意)检查的编译器选项/插件?