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."
我有一个字符串数组:
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."