Scala xs.foreach(yield _)?

Scala xs.foreach(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 让它起作用?

yield 是仅与 for 推导结合使用的关键字,即示例代码中的 for (fn <- filesHere) yield fn。这将通过 yield fn.

遍历 filesHere 和 return 每个元素

接下来会将 fn 元素的结果集合分配给值 result:

val result = for (fn <- filesHere) yield fn

for (fn <- filesHere) yield fn 等价于 filesHere.map(fn => fn).

filesHere.foreach(fn => fn) 等同于 for (fn <- filesHere) fn(即没有 yield 关键字,因此没有结果元素 returned,这意味着在您的情况下它不会执行任何操作有用。

为了完整性:filesHere.foreach(println _) 等同于 filesHere.foreach(fn => println(fn)),它通过 println.

打印到标准输出来做一些更有用的事情

希望这能澄清一点:)。