混淆游戏框架的代码(Confusion about Play framework's cod

2019-10-21 12:18发布

我在斯卡拉区非常新手,最近,我想各地的玩法,玩的框架。 我以前玩控制台生成我的第一个应用程序。

后来,我读的代码,但在下面的代码片段,我就弄糊涂了。

package controllers

import play.api._
import play.api.mvc._

object Application extends Controller {

  def index = Action {
    Ok(views.html.index("Your new application is ready."))
  }
}

在文档方面,行动是一个同伴对象,但什么是下大括号的语法同伴的对象,是像Java中的匿名实现接口的,或大括号里面的内容就是应用方法的重写?

请指点,非常感谢。 对不起,斯卡拉老兵这个幼稚和简单的问题。

Answer 1:

这句法糖Action.apply 。 (你不能有一个匿名的实施的object ,但你可以,如果这是一个trait ,它也将需要new )。 它有几个重载:

final def apply[A](bodyParser: BodyParser[A])(block: R[A] => Result): Action[A]

final def apply(block: R[AnyContent] => Result): Action[AnyContent]

final def apply(block: => Result): Action[AnyContent]

您的代码段使用最后的三个。 顺便说一句,他们都返回实施对象Action[A]特质。



Answer 2:

动作是扩展EssentialAction性状

trait Action[A] extends EssentialAction

必要行动也不过是一个function.Given RequestHeader,一个EssentialAction消耗请求主体(数组[字节]),并返回一个结果。

trait EssentialAction extends (RequestHeader) ⇒ Iteratee[Array[Byte], Result] with Handler

ActionBuilder是一个辅助特征,它拥有一些方法来构建行动。 正是这种特质包含多个重载异步和施工方法。 如果要定义自定义操作(或)在组成一个acction到其他(或)其他后执行一个动作,你就必须使用这个特性并建立自己的行动。

trait ActionBuilder[+R[_]] extends ActionFunction[Request, R]

但是,是什么样的行动{...}语法。 性状ActionBuilder有伴侣的对象也具有相同的名称行动。 请注意,这是从列车操作[A]不同。 该目的将覆盖InvokeBlock方法。 在Scala中,你可以定义对象为好。 你定义一个对象,并提供一个适用的方法,当你调用对象,它被调用。

object Action extends ActionBuilder[Request] {companion
  def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = block(request)
}

你有过在大括号{...}什么是什么,但定义为invokeBlock参数块。 在Scala中您可以使用括号或大括号将参数传递给函数,括号工作得很好,当你有一个多表情像块。 这invokeBlock方法从重载版本在ActionBuilder特质申请的调用。

我明白了,这是一个有点铺天盖地关于云大括号里面的东西取整点,觉得很容易,我花了10天左右要弄清楚这一点。 欢迎到斯卡拉!

资源:

  1. 源代码- https://github.com/playframework/playframework/blob/2.3.x/framework/src/play/src/main/scala/play/api/mvc/Action.scala

  2. 稀疏文件- https://www.playframework.com/documentation/2.3.x/ScalaActionsComposition

  3. 玩API文档- https://www.playframework.com/documentation/2.3.x/api/scala/index.html#play.api.mvc.ActionBuilder

  4. 行动组成优秀的博客- http://www.mariussoutier.com/blog/2013/09/17/playframework-2-2-action-building-action-composition/



文章来源: Confusion about Play framework's code