如果我理解正确
object Application extends Controller {
def page1 = Action { Ok("Hello") }
}
可以写成
object Application extends Controller {
val f : Result = { Ok("Hello") }
def page1 = Action( f )
// i.e. Action.apply( f )
}
documentation表示操作本质上是一个(Request [A] => Result)函数,它处理请求并生成要发送给客户端的结果。
由于Action本质上是一个函数,我们可以将函数f应用于Action,即Action.apply(f)。希望我到目前为止是正确的。
现在提供以下代码,
def index = Action { implicit request =>
Async {
val cursor = collection.find(
BSONDocument(), BSONDocument()).cursor[Patient]
val futureList = cursor.toList
futureList.map { patients => Ok(Json.toJson(patients)) }
}
}
如果我要写
def index = Action(f)
我希望能够写一个函数f。我的伪代码是
val f: Result =
//a function that takes Request[A] and returns Result
{
(request :Request[A]) =>
Async {
val cursor = collection.find(
BSONDocument(), BSONDocument()).cursor[Patient]
val futureList = cursor.toList
futureList.map { patients => Ok(Json.toJson(patients)) }
}
}
我仍然在努力让这项工作得以实现。编写函数的任何帮助都会有所帮助。
答案 0 :(得分:2)
当f Result
为Request[_] => Result
时,您的类型为val f: Request[_] => Result = request =>
Async {
val cursor = collection.find(
BSONDocument(), BSONDocument()).cursor[Patient]
val futureList = cursor.toList
Ok(Json.toJson(futureList ))
}
}
。
f的正确版本如下:
Request[_]
请注意futureList
不能包含泛型类型参数。要使Request是通用的,f必须是def而不是val。
此外,如果Result
是一个列表,那么地图将生成一个Result
而不是一个{{1}}的列表。假设您想要光标中所有患者的JSON列表,我做了更正。
答案 1 :(得分:0)
感谢您的回复。我用了
val f: Request[_] => Result =
//a function that takes Request[A] and returns Result
{
(request : Request[_]) =>
Async {
val cursor = collection.find(
BSONDocument(), BSONDocument()).cursor[Patient]
val futureList = cursor.toList
futureList.map { patients => Ok(Json.toJson(patients)) }
}
}
希望这是写入f的正确方法,它接受一个Request [_]并返回一个Result。