在下面的代码片段中,我有一个递归函数调用,用于在网络调用失败时进行重试(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")
}
}
为什么在递归函数上需要这样做?我的想法是只返回一个true/false布尔值来满足编译器...下面的代码可以正常编译。
// 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
}
}
发布于 2010-09-18 05:30:00
只需从行中删除=,它将返回Unit,这意味着您不需要返回任何内容。
def simpledb_update(name: String, metadata: Map[String,String], attempt: Int) {
我相信需要返回类型,它可以确保所有的递归路径都有正确的类型。在普通函数上,类型将从所有返回点推断出来。
https://stackoverflow.com/questions/3739133
复制相似问题