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
.
打印到标准输出来做一些更有用的事情
希望这能澄清一点:)。
学习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
.
希望这能澄清一点:)。