scala - 如何在scala中打印catch表达式中的失败索引?
问题描述
我有一个看起来像这样的代码:
import scala.util.{Try, Success, Failure}
Try(
for (i <- 1 to 1000) {
doSomething(df(i))
}
) match {
case Success(t) => println(s"success")
case Failure(t) => println(s"failure")
}
我想打印失败输入的索引。如何在 catch 表达式中打印索引 i?
解决方案
您可以使用Cats来代替:
import scala.util.Try
import cats.implicits._
(1 to 1000).traverse(i => Try(doSomething(df(i))).toEither.left.map(ex => (ex, i))) match {
case Right(_) => println("success")
case Left((ex, i)) => println(s"failure: ${ex.getMessage} on idx: ${i}")
}
如果您不想使用Cats,您可以:
val attempts = for {
i <- Stream.range(start = 1, end = 1000) // Thanks to Bogdan for the idea of using a Stream.
} yield Try(doSomething(df(i))).toEither.left.map(ex => (ex, i))
attempts.collectFirst { case Left((ex, i)) => ex -> i } match {
case None => println("success")
case Some((ex, i)) => println(s"failure: ${ex.getMessage} on idx: ${i}")
}
推荐阅读
- javascript - RangeError:仅生产中的最大调用堆栈大小
- reactjs - 为什么在 useMemo 中包装返回对象的函数后,我会收到有关非函数的警告?
- http - 无法使用 HTTP 访问 IIS,只能使用 HTTPS
- reactjs - 在 React 中组合上下文提供程序时从提供程序组件推断 prop 类型
- ios - FCM - 在范围内找不到类型“MessagingRemoteMessage”
- awk - 从 bash 输出中提取字符串
- java - 在 Spring Cloud Sleuth 中跨 CompletableFuture 保持跟踪/跨度
- python - python程序中列表中的排序函数?
- symfony - 无法安装 Symfony
- android - 如何在 NavigationView 中更改 SUBTITLE textAppearance?