Scala 修复匹配列表后的类型擦除

Scala 修复匹配列表后的类型擦除,scala,pattern-matching,Scala,Pattern Matching,考虑以下递归函数: def example (param: List[Int]): Int = { case Nil => 0 case x :: xs => example(xs) } 这会导致以下错误: type mismatch; [error] found : List[Any] [error] required: List[Int] 从参数声明中可以清楚地看出,分解的结果将是Int和List[Int],但显然编译器并不这么认为。我怎样才能做到这一

考虑以下递归函数:

def example (param: List[Int]): Int = {
    case Nil => 0
    case x :: xs => example(xs)
}
这会导致以下错误:

type mismatch;
[error]  found   : List[Any]
[error]  required: List[Int]

从参数声明中可以清楚地看出,分解的结果将是
Int
List[Int]
,但显然编译器并不这么认为。我怎样才能做到这一点呢?

您错过了参数匹配语句。试试这个:

def example (param: List[Int]): Int = param match {
  case Nil => 0
  case x :: xs => example(xs)
}

您错过了param匹配语句。试试这个:

def example (param: List[Int]): Int = param match {
  case Nil => 0
  case x :: xs => example(xs)
}

如接受的答案所示,在
=
之后缺少
参数匹配。或者,您可以通过将
示例
定义为函数值来避免
参数匹配
部分:

val example: List[Int] => Int = {
  case Nil => 0
  case x :: xs => example(xs)
}

带有
case
语句的块被编译器视为匿名函数。

正如接受的答案所示,在
=
之后缺少
参数匹配。或者,您可以通过将
示例
定义为函数值来避免
参数匹配
部分:

val example: List[Int] => Int = {
  case Nil => 0
  case x :: xs => example(xs)
}

带有
case
语句的块被编译器视为匿名函数。

=
之后缺少
参数匹配
。在
=
之后缺少
参数匹配