2015-02-06 72 views
5

我正在通过Runar中的示例和Paul的函数式编程在斯卡拉的书,我已经遇到以下实现提升功能的4.3.2:提升中下划线的含义[A,B](f:A => B):选项[A] =>选项[B] = _ map f

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

我理解功能的目的,但我不明白,因为实施我不明白下划线代表什么。我已经看了许多关于Scala中下划线的无数含义的线程,虽然我确定那些线程必须提及这种类型的用例,但我一定错过了它。

回答

12

这里的下划线是函数的简写。编译器是足够聪明的推断,基于方法签名的返回类型,这是什么意思是:

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

这反过来又扩展为:

def lift[A,B](f: A => B): Option[A] => Option[B] = (o: Option[A]) => o.map(f) 
10

您可能希望有一个看看this answer_ map fsyntactic sugarx => x map f,下划线为匿名函数参数的占位符。

+0

谢谢。我会赞成,但我的声誉太低。我真的也需要你的回答(以及你发布的链接),这个想法是_表示匿名函数中的位置参数完全沉入其中。 – liminalisht 2015-02-06 22:29:08

相关问题