我有以下代码段:
def traverse[E, A, B](es: List[A])(f: A => Either[E, B]): Either[E, List[B]] =
es match {
case Nil => Right(Nil)
case h :: t => (f(h) map2 traverse(t)(f)) (_ :: _)
}
map2
函数实现:
def map2[EE >: E, B, C](b: Either[EE, B])(f: (A, B) => C): Either[EE, C] =
for {
aa <- this
bb <- b
} yield (f(aa, bb))
我不明白的是这段代码:
(f(h) map2 traverse(t)(f)) (_ :: _)
首先,函数f
将应用于参数h
。之后,它会调用map2
函数,直到它到达Nil
中的List
。什么是(_ :: _)
函数?所以奇怪的函数调用。