[英]Scala what does the “def function = Type {” mean?
我正在使用Play 2.x,并在动作处理程序中找到以下语法,例如
object Application extends Controller {
/**
* Index action handler
*/
def index = Action { implicit request =>
Ok(Json.obj("one" -> "two"))
}
}
在这里,我了解了除= Action
之外的所有内容,这不是函数的类型,因为函数的返回类型为play.api.mvc.Result
。 那么= Action
是什么意思?
为了加深理解,我现在介绍身份验证,并根据示例将我的应用程序更改为:
object Application extends Controller with Secured {
/**
* Index action handler
*/
def index = IsAuthenticated { username => implicit request =>
Ok(Json.obj("one" -> "two"))
}
}
这行得通,但是为什么不再需要该Action
? 有必要吗? 我如何组合这些类型中的几种(无论它们是什么意思): Action
或DBAction
, IsAuthenticated
等?
Action
不是类型,而是功能。 如果是类型,则index
签名看起来像
def index: Action = { implicit request =>
注意添加了:
和=
的位置
相关文档指出一个动作是一个
处理请求并生成要发送给客户端的结果的函数
如您play.api.mvc.Result
您正在返回play.api.mvc.Result
好,现在感谢一位同事,我了解了它的含义。 该语法仅表示要返回一个对象,在这种情况下为Action
类型的对象,并且该action将构造函数作为一个构造函数参数,该函数将Request作为输入并返回SimpleResult
,可以将其重写为例如
object Application extends Controller {
/**
* Index action handler
*/
def index : Action[AnyContent] = {
Action(implicit request => Ok(Json.obj("one" -> "two")))
}
}
真正令人困惑的是,在Scala中,它们可以在括号和花括号之间模糊地切换。 因此,很难意识到它不是我正在查看的函数主体,而是动作的构造函数参数(这是一个匿名函数)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.