如何编写重试函数?

Mic*_*ael 3 error-handling scala

假设我有一个函数foo:Int => Try[Int],我需要通过重试来调用它。也就是说,Success大多数k时候我需要调用它直到它返回。

我正在写一个retry这样的函数:

def retry(k: retries)(fun: Int => Try[Int]): Try[Int] = ???
Run Code Online (Sandbox Code Playgroud)

我想retry返回其中一个Success最后一个 Failure。你会怎么写呢?

Yuv*_*kov 5

这是我使用的,它对于任何返回的 thunk 都是通用的T

@tailrec
final def withRetry[T](retries: Int)(fn: => T): Try[T] = {
  Try(fn) match {
    case x: Success[T] => x
    case _ if retries > 1 => withRetry(retries - 1)(fn)
    case f => f
  }
}
Run Code Online (Sandbox Code Playgroud)