学习 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在示例代码中。这将迭代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。
希望这能澄清一点:)。