我写了map1
函数,类似于List.map
:
def map1[A, B](xs: List[A], f: A => B): List[B] = {
xs match {
case List() => scala.collection.immutable.Nil
case head :: tail => f(head) :: map1(tail, f)
}
}
现在我将上述内容称为:
map1(List(1, 2, 3), x => x + 1)
我收到错误:error: missing parameter type
。但是下面的工作:
List(1, 2, 3).map(x => x + 1)
为什么map1
无法使用lamdas?
答案 0 :(得分:4)
在Scala中,参数类型推断在参数列表之间工作,而不是在它们内部。为了帮助编译器推断类型,将f
移动到它自己的参数列表:
def map1[A, B](xs: List[A])(f: A => B): List[B] = {
xs match {
case Nil => scala.collection.immutable.Nil
case head :: tail => f(head) :: map1(tail)(f)
}
}