使用延遲val的我遇到了下面的代碼在JAXMag的斯卡拉特刊:用於緩存字符串表示
package com.weiglewilczek.gameoflife
case class Cell(x: Int, y: Int) {
override def toString = position
private lazy val position = "(%s, %s)".format(x, y)
}
是否在上面的代碼中使用的lazy val
提供比下面的代碼相當多的表現呢?
package com.weiglewilczek.gameoflife
case class Cell(x: Int, y: Int) {
override def toString = "(%s, %s)".format(x, y)
}
還是僅僅是一種不必要的優化?
懶惰應推動值的計算,直到它被調用。但是,很好的問題。它是否創建了一個對象來保存用於評估的函數? – wheaties 2010-10-07 15:32:46
只要你知道,你可以通過調用'(x,y).toString'來獲得相同的字符串格式。 – 2010-10-07 17:00:43