Рассмотрим следующую неработающую функцию:
def sum (list : Seq[Int]) : Int = list match {
case Nil => 0
case head :: tail => head + sum(tail)
}
Здесь функция должна была работать с List [Int]
, но была переработана принять вместо этого Seq [Int]
, таким образом нарушая работу без ведома компилятора.
Эта зияющая дыра в обнаружении неполного сопоставления с шаблоном в Scala делает его практически бесполезным.
Я хочу иметь способ систематического обнаружения таких проблем. В частности, я бы хотел, чтобы компилятор выдавал ошибку / предупреждение при каждом сопоставлении с шаблоном, управляемым instanceof
, т.е. я хочу разрешить сопоставление шаблонов только в запечатанных иерархиях и на настраиваемых сопоставителях.
Существуют ли параметры / плагины компилятора для выполнения консервативных (в отличие от произвольных) проверок безопасности сопоставления с образцом?