Я изучаю красную книгу scala, опубликованную Мэннингом
Реализация List - это класс case:
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