【问题标题】:Scala: def vs val in Play2Scala:Play2中的def vs val
【发布时间】:2015-01-31 01:51:35
【问题描述】:

我一直在按照 Play 中的说明进行操作! Framework Essentials 书,有时我会在控制器中看到使用 def 定义的操作,有时使用 val .

我知道 def 会在调用时重新计算表达式,而 val 会立即计算表达式,但是在控制器动作的上下文中,有什么区别吗?

这里是示例代码:

object Items extends Controller {

  val list = Action { implicit request =>
    ...
  }

  val create = Action { implicit request =>
    ...
  }

  def details(id: Long) = Action { implicit request =>
    ...
  }

  def update(id: Long) = Action { implicit request =>
    ...
  }
}

【问题讨论】:

    标签: scala playframework-2.0


    【解决方案1】:

    正如您所说,def 将在每次调用时重新计算表达式,而 val 将在实例化 Items 对象时进行计算。

    这意味着以def 定义的控制器操作将更慢,因为每次调用它时,控制器都需要实例化Action,并将其传递给您定义的匿名函数,...等等。

    如果表达式不需要任何抽象,则使用val 总是比使用def 更高效。

    【讨论】:

    • 我可以用def替换所有val,或者用val替换所有def,它们都可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 2018-10-01
    • 2018-08-15
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    相关资源
    最近更新 更多