我正在研究曼宁出版的斯卡拉红色书本
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
的方法签名
答案 0 :(得分:3)
两个append()
示例完全相同。第一个下划线是“第一个传入参数”的简写,而第二个下划线是“第二个传入参数”的简写。这只是引用它们并将它们传递给Cons
构造函数的一种简便方法,而无需为每个名字都命名。
另请参阅this question的各种答案。