2

所以,我有一个对象,有方法,像这样:

object Connector {

  def createObject (id : Long, x : Double, y : Double, name : String, objtype : Int, layer : String) : String  = {
    //some code
  }

  def deleteObject (id : Long) : String  = {
    //some code
  }

  def findObject (name : String) : String  = {
    //some code
  }

  //some other methods
}

例如,我想使用相同的代码处理所有方法中的错误,例如:

var res = domethod(methodParams)
if (res.indexOf("Error") > 0){
  doSomeOtherMethod() //that can fix error
  res = domethod(methodParams) //with same params
}
return res

在 Scala 中有没有办法处理这样的错误,并且没有代码重复?

4

1 回答 1

7

您可以创建一个私有函数来处理您的错误:

private def tryUnsafe(f: => String): String = {
  var res = f()
  if (res.indexOf("Error") > 0){
    doSomeOtherMethod() //that can fix error
    res = f()
  }
  return res
}

你可以tryUnsafe这样调用:

tryUnsafe {
  // code that eventually return a String
}

编辑:添加详细信息以解决第一条评论。

你可以tryUnsafe像这样在你的函数中使用:

def createObject (id : Long, x : Double, y : Double, name : String, objtype : Int, layer : String) : String  = {
  tryUnsafe {
    // the code to create an object, that returns a String
  }
}

在回答您的问题时,我假设 * 是,等 domethod的占位符*对于所有s 都是相同的,而不是每个操作的特定一个,如果不是这种情况,除了在您的语句中调用之外,您还可以使用一个参数。createObjectdeleteObjectdoSomeOtherMethoddomethodgfif

于 2015-03-30T15:11:31.400 回答