scala> def lift3[A,B,C,D] (
| f: Function3[A,B,C,D]): Function3[Option[A], Option[B], Option[C], Option
[D]] = {
| (oa: Option[A], ob:Option[B], oc: Option[C]) =>
| for(a <- oa; b <- ob; c <- oc) yield f(a,b,c)
| }
lift3: [A, B, C, D](f: (A, B, C) => D)(Option[A], Option[B], Option[C]) => Option[D]
特别是,以下一行:
def lift3[A,B,C,D] (
f: Function3[A,B,C,D]): Function3[Option[A], Option[B], Option[C], Option
[D]]
这取自Joshua D Suereth撰写的Scala In Depth一书(清单2.1,第2章)。我不确定附加Option[D]
的用途是什么。在函数体中,代码仅映射到输出类型D
的前三个参数。那么,在输入参数列表中声明D
?我错过了什么吗?
由于我的理解有限,我会将函数声明读作一个函数,该函数将函数作为参数(反过来需要4个参数)并返回一个带有4个参数的函数。另外,为什么没有提到返回类型? 提前谢谢!
答案 0 :(得分:3)
由于我的理解有限,我会将函数声明读作一个函数,该函数将函数作为参数(反过来需要4个参数)并返回一个带有4个参数的函数。另外,为什么没有提到返回类型?
Function3[A,B,C,D]
是一个包含 3 参数的函数(类型A
,B
和C
)和D
是返回类型(它也可以写成(A, B, C) => D
;这是完全相同的类型)。因此,在Function3[Option[A], Option[B], Option[C], Option[D]]
中,Option[D]
是返回类型,而不是参数类型。
答案 1 :(得分:2)