作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
s.toInt)) // List(1, 2, 3) -6ren">
如果我有一个 Seq
,我可以对其进行 map
。
val ss = Seq("1", "2", "3")
println(ss.map(s => s.toInt)) // List(1, 2, 3)
但有时,您传递给 map
的函数可能会失败。
val ss = Seq("1", "2", "c")
println(ss.map(s => try { Success(s.toInt) } catch { case e: Throwable => Failure(e) })) // List(Success(1), Success(2), Failure(java.lang.NumberFormatException: For input string: "c"))
最后一个将返回 Seq[Try[Int]]
。我真正想要的是一个 Try[Seq[Int]]
,如果其中任何一个映射是 Failure
,它会停止迭代并返回 失败
代替。如果没有错误,我希望它只返回所有转换后的元素,从 Try
解包。
Scala 的惯用方式是什么?
最佳答案
你可能想多了。 map
中的匿名函数本质上与 Try.apply
相同。如果你想以 Try[Seq[Int]]
结束,那么你可以将 Seq
包装在 Try.apply
和 map
内:
scala> val ss = Try(Seq("1", "2", "c").map(_.toInt))
ss: scala.util.Try[Seq[Int]] = Failure(java.lang.NumberFormatException: For input string: "c")
如果有任何一个toInt
失败,它会抛出一个异常并停止执行,变成一个Failure
。
关于Scala `map` 但早早退出 `Failure`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40229633/
我是一名优秀的程序员,十分优秀!