foreach(println) 和 foreach(println()) 有什么区别?

What is the difference between foreach(println) and foreach(println())?

我有一个字符串数组:

val str:Array[String] = Array("aa","bb")
scala> str.foreach(println) // works
aa
bb
scala> str.foreach(println()) // println() also returns a Unit, doesn't it?
                          ^
error: type mismatch;
found   : Unit
required: String => ?

为什么 str.foreach(println) 可以正常工作,但 str.foreach(println()) 却不行?
println 不等同于 println() 而 returns 是 Unit 值吗?

原因是您缺少下划线。试试这个

str.foreach(println(_))

println 是一种方法(可转换为函数),它接受输入(在本例中为 String)并产生结果(Unit)和副作用(打印到 StdOut)。

println() 是一种不接受输入、产生结果 (Unit) 和副作用(\n 到 StdOut)的方法的调用。

它们不一样。

第二个在 foreach() 中不起作用,因为 foreach() 将元素(在本例中为字符串)提供给它的参数,而 println() 不会接受 foreach()正在喂它。

这会起作用 str.foreach(_ => println()) 因为下划线箭头 (_ =>) 表示:"Ignore the input. Just throw it away and invoke what follows."