【发布时间】:2012-01-18 14:20:30
【问题描述】:
考虑以下损坏的函数:
def sum (list : Seq[Int]) : Int = list match {
case Nil => 0
case head :: tail => head + sum(tail)
}
这里,该函数应该使用List[Int],但被重构为接受Seq[Int],因此在编译器没有注意到的情况下被破坏。
Scala 不完整的模式匹配检测中的这个巨大漏洞使它几乎毫无用处。
我希望有一种方法可以系统地检测此类问题。具体来说,我希望编译器在每个 instanceof-guided 模式匹配时发出错误/警告,即我只想允许在密封层次结构和自定义匹配器上进行模式匹配。
是否存在用于对模式匹配安全性进行保守(而不是任意)检查的编译器选项/插件?
【问题讨论】:
-
我也经常将这个匹配示例与
List一起使用。在这种情况下,我的建议是使用list.toList match ...(因为您事先知道稍后可能会重构一些代码(可能不是这种方法),而匹配案例仅适用于List),然后您可以重构该方法Seq的参数没有损坏的代码。
标签: scala pattern-matching non-exhaustive-patterns