【发布时间】:2018-07-18 10:15:27
【问题描述】:
我正在尝试使用 Scala 执行一些重试逻辑。为了提供 MRE,我将异常抛出对象替换为 Y。运行X.main 时。我希望看到这会打印两条失败消息,然后是一条成功消息,但似乎 return 语句实际上是在充当空操作,并且我看到了 3 条成功消息。
我意识到这不是惯用的 Scala,还有很多其他方法可以做到这一点,但是没有办法从 Scala 中的 for 循环中返回吗?如果不是,那是为什么呢?
object X {
def main(args : Array[String]) : Unit = {
val y = new Y()
for ( i <- 1 to 5 ) {
try {
y.doSomething()
return
} catch {
case e : Throwable =>
if ( i == 5 ) {
throw e
}
}
}
}
}
class Y {
var counter = 0
def doSomething() : Unit = {
if ( counter < 2 ) {
println("Tried to do something, but failed")
counter += 1
throw new RuntimeException
}
println("Did something")
}
}
【问题讨论】: