这里使用lambda有什么问题

时间:2017-07-28 20:31:26

标签: scala lambda

我写了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?

1 个答案:

答案 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)
  }
}