【发布时间】:2014-07-12 03:39:46
【问题描述】:
我在 Scala 中有一个 Seq[T],并且想对每个元素做一些事情。在成功的情况下,我想将结果产生给用 for comprehension 创建的 Seq,但我不想产生任何异常情况。
我想要这样的东西:
val destinations = for(path <- files) {
try {
yield tryReadDestinations(path)
} catch {
case _ => log.error("Error happened :(")
}
}
但是这样的代码当然不能编译。我怎样才能实现这样的目标?
更新:
我设法得到这样的东西:
files
.map(a => tryExtractDestinationsFromAttachment(a))
.filter {
case Success(d) => true
case Failure(_) => false
}
.map(t => t.get)
.flatten
tryExtractDestinationsFromAttachment 返回Try[String]
但我相信有可能让它更简单/更具可读性?
【问题讨论】:
-
你期待什么结果?在成功的情况下收集结果,在任何时候失败的情况下,原因是什么? (全部或全部)?
标签: scala pattern-matching yield