次の壊れた関数を考えてみましょう。
def sum (list : Seq[Int]) : Int = list match {
case Nil => 0
case head :: tail => head + sum(tail)
}
ここで、関数は で動作するはずでしたList[Int]
が、代わりに受け入れるようにリファクタリングされたためSeq[Int]
、コンパイラが気付かないうちに壊れてしまいました。
Scala の不完全なパターン一致検出のこの大きな穴により、ほとんど役に立たなくなります。
このような問題を体系的に検出する方法が必要です。具体的には、すべてのガイド付きパターン マッチでコンパイラにエラー/警告をinstanceof
発行させたいと考えています。つまり、シールされた階層とカスタム マッチャーでのみパターン マッチを許可したいと考えています。
パターン マッチングの安全性の保守的な (恣意的ではなく) チェックを行う既存のコンパイラ オプション/プラグインはありますか?