【问题标题】:What is this Scala construct doing?这个 Scala 结构在做什么?
【发布时间】:2020-02-12 12:59:28
【问题描述】:

我一直在使用 Play!使用 Java 的框架,并希望使用 Scala 进行尝试。 我已经开始阅读 Scala 书籍,但最基本的 Play!样品让我完全困惑:

  def index(): Action[AnyContent] = Action { implicit request =>
    Ok(views.html.index())
  }

什么是 Scala 构造的 Play!在这里使用? 我知道我们正在定义一个函数,它返回一个带有通用参数AnyContent 的Action。但接下来的部分让我感到困惑。在这种情况下,分配意味着什么?

如果我去定义 Action[AnyContent] 它被定义为trait Action[A] extends EssentialAction { ... } 如果我在equals之后去Action的定义,它被定义为:

trait BaseController extends BaseControllerHelpers {
  /**
   * The default ActionBuilder. Used to construct an action, for example:
   *
   * {{{
   *   def foo(query: String) = Action {
   *     Ok
   *   }
   * }}}
   *
   * This is meant to be a replacement for the now-deprecated Action object, and can be used in the same way.
   */
  def Action: ActionBuilder[Request, AnyContent] = controllerComponents.actionBuilder
} 

注意:我对使用的 Scala 构造感兴趣,我不在乎 Play!实际上是在这里做的,我有点理解。

【问题讨论】:

  • 这不是赋值,= 在这里将方法签名与正文分开,就像您在def Action 中看到的那样。
  • @LuisMiguelMejíaSuárez 在最近的 Play 版本中它不再是 object,而是在注入的 ActionBuilder 上调用 apply,参见 stackoverflow.com/a/60186550/5205022

标签: scala playframework


【解决方案1】:

您实际上是在调用Action.apply(),它在ActionBuilder 中定义为here。 apply() 函数的第一个也是唯一一个参数是函数request => Ok(...)。

【讨论】:

    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2015-04-11
    • 2021-04-08
    • 1970-01-01
    相关资源
    最近更新 更多