s.toInt)) // List(1, 2, 3) -6ren">
gpt4 book ai didi

Scala `map` 但早早退出 `Failure`

转载 作者:行者123 更新时间:2023-12-03 23:31:03 25 4
gpt4 key购买 nike

如果我有一个 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.applymap 内:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com