Scala:在Play2中,def和val的区别

4

我一直在按照《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 =>
    ...
  }
}
1个回答

0

正如你所说,def每次调用时都会重新评估表达式,而val将在实例化Items对象时进行评估。

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

如果表达式不需要任何抽象,那么使用val而不是def始终更具性能优势。


我可以将所有的“val”替换成“def”,或者将所有的“def”替换成“val”,它们都能够正常运行,没有任何问题。 - Khanetor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接