2014-12-02 63 views
4

我一直在玩Play中的指令!框架Essentials一書,有時我看到了高清定義控制器的動作,有時用VALScala:def vs val Play2

我知道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 => 
    ... 
    } 
} 

回答

0

至於你說,def將在每次被調用時重新評估的表達,而當Items對象被實例化val進行評價。

其導致的結果是,在def來定義將因爲每次調用,控制器需要實例化一個Action時間,通過它,你所定義的匿名函數的控制器動作,。 ..等等。

如果表達式不需要任何抽象,那麼使用val而不是def會更高效。

+0

我可以用def替換所有val,或者用val替換all def,它們都可以正常工作。 – Khanetor 2014-12-03 07:37:10