让我们为这个问题创建一个值:
val a = 1 :: Nil
现在,我可以证明匿名函数可以用这样的简写形式编写:
a.map(_*2)
可以写一个这个函数的简写吗?:
a.map((x) => x)
我的解决方案不起作用:
a.map(_)
答案 0 :(得分:42)
对于记录,a.map(_)
不起作用,因为它代表x => a.map(x)
,而不是a.map(x => x)
。发生这种情况是因为代替参数的单个_
代表部分应用的函数。在2*_
的情况下,代表匿名函数。这两种用途非常接近,很容易让他们感到困惑。
答案 1 :(得分:23)
您的第一个速记表格也可以无点写入
a map (2*)
感谢乘法是可交换的。
对于(x) => x
,您需要identity
功能。这在Predef中定义并且是通用的,因此您可以确定它是类型安全的。
答案 2 :(得分:17)
您应该对此用例使用identity
函数。
a.map(identity)
identity
在 scala.Predef 中定义为:
implicit def identity[A](x: A): A = x