Что вызывает ошибку этого типа в шаблоне защиты для сопоставления списка кортежей - PullRequest
0 голосов
/ 30 января 2019

У меня есть следующий код:

object foo{
  def splitSeq[Int](in: List[Int], out: List[(Int,Int)] = Nil): List[(Int,Int)] = (in,out) match {
    case (Nil,o) => o
    case (next :: rest, Nil) =>
      splitSeq(rest, List((next,next)))
    case (next :: rest, (start, end) :: accRest) if (end + 1 == next) =>
      splitSeq(rest, (start, next) :: accRest)
    case (next :: rest, acc) =>
      splitSeq(rest, (next,next) :: acc)
  }
}

И он выдает следующую ошибку компилятора, которую я полностью не понимаю:

~/tmp> scalac test.scala 
test.scala:6: error: type mismatch;
 found   : Int(1)
 required: String
  case (next :: rest, (start, end) :: accRest) if (end + 1 == next) =>
                                                         ^
one error found

1 Ответ

0 голосов
/ 30 января 2019

Удалить [Int] здесь

def splitSeq[Int](in: List[Int], ...

Это должно быть просто

def splitSeq(in: List[Int], ...

Вы объявили параметр типа Int (как если бы вы написали def splitSeq[T](in: List[T], ...) вместо использования стандартногоInt.И этот тип параметра Int затенен стандарт Int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...