scala:使用foldRight附加列表

时间:2018-10-04 20:58:31

标签: scala functional-programming

我正在研究曼宁出版的斯卡拉红色书本

List实现是一个案例类:

case class Cons[+A](head: A, tail: List[A]) extends List[A]

foldRight 定义为:

def foldRight[A, B](as: List[A], z: B)(f: (A, B) => B): B 

并实现为

  def foldRight[A, B](as: List[A], z: B)(f: (A, B) => B): B = { // Utility functions
    as match {
      case Nil => z
      case Cons(h, t) => f(h, foldRight(t, z)(f))
    }
  }

要将一个列表附加到另一个列表,我的解决方法是:

  def append[A](l1: List[A], l2: List[A]): List[A] 
      = foldRight(l1, l2)((l1head,l2)=>Cons(l1head, l2))

答案键显示以下代码:

  def append[A](l1: List[A], l2: List[A]): List[A] = foldRight(l1, l2)(Cons(_, _))

问题: (Cons(_, _))如何符合f: (A, B) => B的方法签名

1 个答案:

答案 0 :(得分:3)

两个append()示例完全相同。第一个下划线是“第一个传入参数”的简写,而第二个下划线是“第二个传入参数”的简写。这只是引用它们并将它们传递给Cons构造函数的一种简便方法,而无需为每个名字都命名。

另请参阅this question的各种答案。