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
语句的块被编译器视为匿名函数。在=
之后缺少参数匹配
。在=
之后缺少参数匹配
。