在 Scala中的功能编程的第4.3.2节中,我不太了解函数的定义。我可以看到它有效,但我不确定为什么。
def lift[A,B](f: A => B): Option[A] => Option[B] = _ map f
在上面的陈述中是' _' eta扩张?我可以告诉你,ScalaIDE(eclipse插件)告诉我它是一个选项[A]。所以你当然可以改写上面的内容:
def lift2[A,B](f: A => B): Option[A] => Option[B] = { oa: Option[A] => oa map f }
但我想知道的是编译器如何知道 _ 将成为第一个定义中的选项[A]。它真的和#34一样简单;因为返回类型表示我们正在定义一个函数,该函数将选项[A]作为它的参数&#34 ;?
答案 0 :(得分:2)
在上面的陈述中,'_'是eta扩展吗?
此上下文中的_是lambda表达式的简写,与...完全等效
(oa => oa map f)
因为返回类型表示我们正在定义一个以Option [A]作为参数的函数
是。你可能在这里缺少的是函数是Scala中的值。 lift
的返回类型为Option[A] => Option[B]
,因此在表达式(oa => oa map f)
中,oa必须为Option[A]
类型。