我有一个字符串数组:
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
?
答案 0 :(得分:7)
println
是一种方法(可转换为函数),它接受输入(在这种情况下为String
)并产生结果(Unit
)和副作用(打印到StdOut中) )。
println()
是一种方法的调用,该方法无需输入,不会产生结果(Unit
)和副作用(对StdOut的\n
)。
他们不一样。
第二个在foreach()
中不起作用,因为foreach()
将元素(在这种情况下为字符串)作为其参数,而println()
不会接受{{1 }}正在喂食它。
这将有效foreach()
,因为下划线箭头(str.foreach(_ => println())
)表示:“忽略输入。将其丢弃并调用随后的内容。”
答案 1 :(得分:1)
原因是您缺少下划线。试试这个
str.foreach(println(_))