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

时间:2019-10-03 02:28:12

标签: scala eta-expansion

我有一个字符串数组:

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()值的Unit

2 个答案:

答案 0 :(得分:7)

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

println()是一种方法的调用,该方法无需输入,不会产生结果(Unit)和副作用(对StdOut的\n)。

他们不一样。

第二个在foreach()中不起作用,因为foreach()将元素(在这种情况下为字符串)作为其参数,而println()不会接受{{1 }}正在喂食它。

这将有效foreach(),因为下划线箭头(str.foreach(_ => println()))表示:“忽略输入。将其丢弃并调用随后的内容。”

答案 1 :(得分:1)

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

str.foreach(println(_))