我正在使用Runar和Paul的 Scala中的函数编程一书中的示例,我在部分中遇到了以下升力函数的实现4.3.2:
def lift[A,B](f: A => B): Option[A] => Option[B] = _ map f
我理解该功能的目的,但我不了解实现,因为我不明白下划线代表什么。我已经看过许多关于Scala中无数下划线含义的其他线索,虽然我确信这些线程必须提到这种用例,但我必须错过它。
答案 0 :(得分: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)
答案 1 :(得分:11)
您可能需要查看this answer。对于_ map f
,x => x map f
为syntactic sugar,下划线是匿名函数参数的占位符。