可以请一些人从scala解释这一系列的编码

时间:2017-05-23 13:36:56

标签: scala functional-programming

我真的很难理解这行代码。有人可以详细解释一下吗?

def sequence[A](aos: List[Option[A]]): Option[List[A]] =
  aos.foldRight[Option[List[A]]](Some(Nil))((a,acc) => map2(a,acc)(_ :: _))

1 个答案:

答案 0 :(得分:3)

很难用一小段代码来解释,但我会尝试一下。

说明:该功能正在尝试在sequence上实施List[Option[A]]操作。此操作在FP中非常常见(我建议您查看cats中的常规实现。通常,它会将F[G[A]]类型转换为G[F[A]],在您的示例中,它会专门转换{{1}转到List[Option[A]]

更新:您必须指定Option[List[A]]以确保编译器推断出正确的类型。由于ADT在Scala中的实现方式,如果您没有指定返回类型,编译器会将Option[List[A]]推断为返回类型。