Scala:Play2中的def vs val

时间:2014-12-02 17:51:24

标签: scala playframework-2.0

我一直在按照游戏中的说明进行操作! 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 =>
    ...
  }
}

1 个答案:

答案 0 :(得分:0)

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

这意味着根据def定义的控制器操作将更慢,因为每次调用时,控制器都需要实例化Action ,传递你定义的匿名函数,等等。

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