Scala xs.foreach(yield _)?

1 foreach scala yield

学习 Scala 并遇到以下困惑:

假设:val filesHere = (new java.io.File(".")).listFiles

这有效:for (fn <- filesHere) yield fn

这有效:filesHere.foreach(println _)

这不起作用:filesHere.foreach(yield _)

错误信息是:<console>:1: error: illegal start of simple expression

为什么最后一项不起作用以及如何使用它使其工作foreach

Per*_*ost 5

yield是仅与推导式结合使用的关键字for,即for (fn <- filesHere) yield fn在示例代码中。这将迭代filesHere并通过返回每个元素yield fn

然后,以下代码会将生成的元素集合分配给fnvalue result

val result = for (fn <- filesHere) yield fn
Run Code Online (Sandbox Code Playgroud)

for (fn <- filesHere) yield fn相当于filesHere.map(fn => fn).

filesHere.foreach(fn => fn)将相当于for (fn <- filesHere) fn(即没有yield关键字,因此没有返回结果元素,这意味着在您的情况下它不会做任何有用的事情。

为了完整起见:filesHere.foreach(println _)相当于filesHere.foreach(fn => println(fn))通过通过打印到标准输出来执行更有用的操作println

希望这能澄清一点:)。