斯卡拉,无法列出名单

kkl*_*klw 1 scala list concatenation

我试图将头部的串联附加到尾部和另一个列表的串联中.但是,我有一个错误:递归方法concat需要结果类型.

case z :: zs => z :: concat(zs, ys))
Run Code Online (Sandbox Code Playgroud)

错误就在::我做的时候z :: concat(zs, ys).

完整代码:

def concat[T](xs: List[T], ys: List[T]) = xs match {
  case List() => ys
  case z :: zs => z :: concat(zs, ys)
}
var list_1 = List(1,2)
var list_2 = List(2,3)

var list_3 = concat(list_1, list_2)
Run Code Online (Sandbox Code Playgroud)

daz*_*sed 7

这是文档中引用的一句话:

对于递归方法,编译器无法推断结果类型

由于您以递归方式定义函数,因此需要提供函数的结果类型:

def concat[T](xs: List[T], ys: List[T]): List[T] = xs match {
  case List() => ys
  case z :: zs => z :: concat(zs, ys)
}
Run Code Online (Sandbox Code Playgroud)