Я пытаюсь изучить Scala, и пока он кажется очень мощным языком, но некоторые вещи кажутся труднодостижимыми, может быть, это просто моя кривая обучения. Я искал в Интернете несколько дней, но не смог найти хорошего решения, чтобы делать то, что я хочу делать.
У меня есть несколько методов (с разными сигнатурами, включая тип возвращаемого значения), которые я хочу обернуть в логике повтора.
Я хочу продолжать вызывать метод заранее определенное количество раз, пока метод не завершится успешно.
Вот пример:
def downloadLocal(memory: Boolean, userName: Name, version: Int): Int
def downloadRemote(
memory: Boolean, userName: Name, masterNodeId: String, masterNodeId: String
): Pair(Int, Int)
Я хочу заключить эти два метода в логику повтора. Вот моя попытка логики повтора:
trait WithRetry{
def withRetry(retry :Int){
try{
callBack
}catch{
case exception:Throwable =>
if(retry>0){
logger.warn(exec+" method failed with an exception. retry number is:" + retry);
logger.warn(exception);
withRetry(retry-1)
}
else{
throw exception
}
}
}
def callBack():Any
}
У меня проблема в том, что я не могу найти чистый способ обернуть мои методы (downloadRemote и downloadLocal) внутри логики повтора.
Есть предложения / мысли?