繁体   English   中英

Scala“ def function = Type {”是什么意思?

[英]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 有必要吗? 我如何组合这些类型中的几种(无论它们是什么意思): ActionDBActionIsAuthenticated等?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM