学习Scala并尝试重构以下两个函数以删除重复的逻辑。我应该创建一个更高阶的函数或其他东西,以避免重复的代码?使用这样的重复代码有一些更类似的方法,只有不同的调用不同的Domain方法。
对重构感到困惑。使用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")
}
}
答案 0 :(得分: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)(_) }
答案 1 :(得分:0)
我也是Scala的新手,但我认为我们可以做这样的事情。如果我错了,请纠正我。
你可以做这样的事情
def foo(f:Int=>Int,x:Int):Int = {f(x)}
foo(x=>x+x,3)
同样地,您可以将要调用的函数传递给公共函数。