在以下scala for循环中
private val tpath = for (csvPath <- CsvPaths
if new java.io.File(csvPath).exists()
) yield csvPath
我想添加一个println副作用 - 类似于以下内容:
private val tpath = for (csvPath <- CsvPaths
if new java.io.File(csvPath).exists() { // Following is illegal syntax
println(s"Following path exists $csvPath")
}
) yield csvPath
那么是否有任何语法可以将副作用添加到for / yield循环中?
答案 0 :(得分:6)
您可以使用_赋值:
for {
csvPath <- CsvPaths
if (new java.io.File(csvPath).exists())
_ = println(s"Following path exists $csvPath")
} yield csvPath
当然,对于这个具体的例子,你可以使用一个块来获得收益:
for {
csvPath <- CsvPaths
if (new java.io.File(csvPath).exists())
} yield {
println(s"Following path exists $csvPath")
csvPath
}
但是如果你想把呼叫放在&#34;中间&#34;而上述技术很有用。之后有更多<-
行的for / yield链。
答案 1 :(得分:-1)
for {
csvPath <- CsvPaths
_ = if(new java.io.File(csvPath).exists()) println(...)
} yield csvPath
或
for {
csvPath <- CsvPaths
} yield {
if(new java.io.File(csvPath).exists()) println(...)
csvPath
}