Scala强调最小功能

时间:2010-12-12 14:06:47

标签: scala anonymous-function

让我们为这个问题创建一个值:

val a = 1 :: Nil

现在,我可以证明匿名函数可以用这样的简写形式编写:

a.map(_*2)

可以写一个这个函数的简写吗?:

a.map((x) => x)

我的解决方案不起作用:

a.map(_)

3 个答案:

答案 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