打开此升降功能的含义

时间:2015-12-11 17:23:59

标签: scala

我不确定以下功能如何运作:

  def lift[A, B](f: A => B): Option[A] => Option[B] = _ map f

我知道它会转换一个函数,该函数接受A类型的值并将类型B的值返回到一个函数中,该函数采用类型Option[A]的值并返回{{ 1}}。但我坚持下划线正在做什么以及地图如何运作。有人可以扩展功能定义吗?

2 个答案:

答案 0 :(得分:2)

def lift[A, B](f: A => B): Option[A] => Option[B] = _ map f

它适用于

def lift[A, B](f: A => B): Option[A] => Option[B] = x => x map f

(这是下划线在此上下文中的工作方式)

返回类型注释为Option[A] => Option[B]。感谢此编译器将知道x的类型为Option[A]。我们可以明确地说明,进一步扩展它

def lift[A, B](f: A => B): Option[A] => Option[B] = (x: Option[A]) => x map f

因此,返回的函数采用Option[A]并使用f对其进行映射。 Option.map接受函数A => B的参数,因此一切正确。

请注意,因为我注释了函数作为参数的类型,所以现在可以省略这样的提升方法类型

def lift[A, B](f: A => B) = (x: Option[A]) => x map f

我在这篇文章中写的所有片段都是等效的。

答案 1 :(得分:1)

在这种情况下,

_ map f会返回一个带Option[A]并返回Option[B]的函数。

在这种情况下,_是通过指定其参数位置来构建和返回函数的快捷方式。
所以这里是Option[A]参数的位置。

每当进一步调用此返回函数时,它将执行:

thePassedOptionA map f