В приведенном ниже фрагменте кода у меня есть рекурсивный вызов функции, используемый для облегчения повторной попытки в случае сбоя сетевого вызова (Amazon SimpleDB иногда возвращает 503 и требует повторной попытки.)
Когда я пытаюсь скомпилировать, Scala жалуется recursive method simpledb_update needs result type
.
// sends data to SimpleDB. Retries if necessary
def simpledb_update(name: String, metadata: Map[String,String], attempt: Int) = {
try {
db(config("simpledb_db")) += (name, metadata)
} catch {
case e =>
// if it fails, try again up to 5 times
if(attempt < 6)
{
Thread.sleep(500)
simpledb_update(name, metadata, attempt + 1)
} else
AUlog(name + ": SimpleDB Failed")
}
}
Почему это требуется для рекурсивных функций? Моя мысль состоит в том, чтобы просто вернуть истинное / ложное логическое значение, чтобы удовлетворить компилятор ... следующий компилируется нормально.
// sends data to SimpleDB. Retries if necessary
def simpledb_update(name: String, metadata: Map[String,String], attempt: Int): Boolean = {
try {
db(config("simpledb_db")) += (name, metadata)
true
} catch {
case e =>
// if it fails, try again up to 5 times
if(attempt < 6)
{
Thread.sleep(500)
simpledb_update(name, metadata, attempt + 1)
} else
AUlog(name + ": SimpleDB Failed")
false
}
}