为什么Scala需要递归函数的返回类型?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (38)

当我尝试编译时,有这样的代码和问题存在:

// 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
  }
}
提问于
用户回答回答于

你不需要组成返回类型,只需要声明你已使用的返回类型。单元是只有一个元素的特殊类型()。它也是Scala中大部分“语句”的类型,并且是返回类型,用于声明不需要返回任何内容但仅为其副作用执行的方法。你可以将你的方法声明为返回单位,就像其他类型一样:

def simpledb_update(name: String, metadata: Map[String,String], attempt: Int):Unit = {

还有这样:

def simpledb_update(name: String, metadata: Map[String,String], attempt: Int){
用户回答回答于

只需从行中删除=,它将返回单位,这意味着你不需要返回任何东西:

def simpledb_update(name: String, metadata: Map[String,String], attempt: Int) {

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励