3

学习 Scala 并尝试重构以下两个函数以删除重复的逻辑。我应该创建一个高阶函数还是其他东西以避免重复代码?有更多类似的方法和这样的重复代码,只是在调用不同的域方法上有所不同。

对重构有点困惑。使用 Scala 2.10 版

def authenticate = Action(parse.json) { request =>
  val json = request.body
  val input = Json.fromJson[User](json)
  input.asOpt match {
    case Some(m: User) => Ok(Domain.authenticate(m)).as("application/json")
    case None => Ok("bad input")
  }
}

def addUser = Action(parse.json) { request =>
  val json = request.body
  val input = Json.fromJson[User](json)
  input.asOpt match {
    case Some(m: User) => Ok(Domain.addUser(m)).as("application/json")
    case None => Ok("bad input")
  }
}
4

2 回答 2

2

我想你可以做类似(未经测试)的事情:

private def common[A](f:User=>A)(request:RequestHeader) = {
  val json = request.body
  val input = Json.fromJson[User](json)

  input.asOpt match {
    case Some(m: User) => Ok(f(m)).as("application/json")
    case None => Ok("bad input")
  }
}

def addUser = Action(parse.json) { common(Domain.adduser)(_) }

def authenticate = Action(parse.json) { common(Domain.authenticate)(_) } 
于 2013-02-13T06:26:21.223 回答
0

我也是 Scala 的新手,但我认为我们可以做这样的事情。如果我错了,请纠正我。

你可以做这样的事情

def foo(f:Int=>Int,x:Int):Int = {f(x)}
   foo(x=>x+x,3)

因此,类似地,您可以将要调用的函数传递给通用函数。

于 2013-02-13T03:42:31.300 回答