斯卡拉"def function = Type {"是什么意思?



我正在使用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

好的,

现在多亏了一位同事,我明白了它是什么。该语法仅表示返回一个对象,在本例中为Action类型的对象,并且该操作将一个函数作为构造函数参数,该函数将请求作为输入并返回SimpleResult,可以重写为例如

object Application extends Controller { 
    /**
     * Index action handler
     */
     def index : Action[AnyContent] = { 
         Action(implicit request => Ok(Json.obj("one" -> "two")))
     }
 }

实际上令人困惑的是,在 Scala 中,他们可以在括号和大括号之间切换有点模糊。因此,很难意识到它不是我正在查看的函数体,而是操作的构造函数参数(这是一个匿名函数(

最新更新