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