是否可以在scala中装饰方法?

时间:2015-03-30 14:40:08

标签: scala scala-2.11

所以,我有一个对象,有方法,类似的东西:

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有没有办法处理这样的错误,没有代码重复?

1 个答案:

答案 0 :(得分:6)

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

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
  }
}

在回答你的问题时,我认为是这样的 * domethodcreateObjectdeleteObject等的占位符 * doSomeOtherMethod对于所有domethod是相同的,而不是每个操作的特定一个,如果不是这样,除{g之外,您还可以使用f参数1}}调用if声明。