假设我有一个函数foo:Int => Try[Int]
,我需要重试它。也就是说,我需要调用它,直到它最多Success
次返回k
。
我正在写一个函数retry
:
def retry(k: retries)(fun: Int => Try[Int]): Try[Int] = ???
我希望retry
返回Success
或最后 Failure
。你会怎么写的?
答案 0 :(得分:4)
这是我使用的那个,它在返回T
的任何thunk上都是通用的:
@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
}
}