在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抱怨这个?
答案 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主体中的参数。