【发布时间】:2015-01-23 06:25:50
【问题描述】:
在 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 to 3).foreach(print(x => x + ","))这是非法的 -
@serejja 谢谢!但是为什么
(1 to 3).foreach(print(_ ))有效?会不会扩展成(1 to 3).foreach(print(x => x )),这也是违法的? -
请看这个答案 stackoverflow.com/questions/1025181/hidden-features-of-scala/… 简而言之,
(1 to 3).foreach(print(_ + ","))翻译成我上面写的东西,(1 to 3).foreach(print(_))翻译成(1 to 3).foreach(x => print(x))
标签: scala lambda functional-programming