为什么这个lambda函数不能在Scala中使用`_`?

时间:2014-11-25 09:54:06

标签: scala lambda functional-programming

在scala REPL中,这很好用

scala> (1 to 3).foreach(i => print(i + ","))
1,2,3,

但这不会起作用

scala> (1 to 3).foreach(print(_ + ","))
<console>:8: error: missing parameter type for expanded function ((x$1) => x$1.$plus(","))
              (1 to 3).foreach(print(_ + ","))

如果我删除+","部分,它会再次起作用:

scala> (1 to 3).foreach(print(_ ))
123

我认为(1 to 3).foreach(print(_ + ","))可能有效,因为只有一个参数_。为什么scala抱怨这个?

1 个答案:

答案 0 :(得分:4)

(1 to 3).foreach(print(_ + ","))

扩展为

(1 to 3).foreach(print(x => x + ","))

与前者无效。

另一方面

 (1 to 3).foreach(print(_))

扩展为

 (1 to 3).foreach(x => print(x))

这是完全合法的。

简而言之,_扩展为一个显式的lambda参数,然后将其用作lamba主体中的参数。