为scala yield语句添加副作用

时间:2015-01-02 23:07:30

标签: scala yield

在以下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循环中?

2 个答案:

答案 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
}