首页 > 解决方案 > 是什么导致匹配元组列表的模式保护中出现这种类型错误

问题描述

我有以下代码:

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

标签: scalacompiler-errors

解决方案


[Int]在这里删除

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

应该只是

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

您声明了类型参数Int(就像您写的一样def splitSeq[T](in: List[T], ...)而不是使用标准Int。并且这个类型参数Int遮蔽了标准Int


推荐阅读