首页 > 解决方案 > foreach(println) 和 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()which 返回一个Unit值吗?

标签: scalaeta-expansion

解决方案


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

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

他们不一样。

第二个在 a 中不起作用,foreach()因为foreach()将元素(在这种情况下为字符串)提供给它的参数,并且println()不会接受foreach()提供它的输入。

这将起作用str.foreach(_ => println()),因为下划线箭头 ( _ =>) 表示:“忽略输入。只需将其丢弃并调用以下内容。”


推荐阅读