2016-07-09 100 views
0

我在網上當然看到這個class定義,我走:更新一個字段聲明爲VAL

class Img(val width: Int, val height: Int, private val data: Array[Int]) { 
     def this(w: Int, h: Int) = this(w, h, new Array(w * h)) 
     def apply(x: Int, y: Int): Int = data(y * width + x) 
     def update(x: Int, y: Int, c: Int): Unit = data(y * width + x) = c 
    } 

我很困惑。我們如何更新data這樣的data(y * width + x) = c即使它被宣佈爲val

這是一個更廣泛使用的模式?

+0

它有點像Java中的final int [10]數據。你不能改變參考,但如果它是可變的,在這種情況下它可以是內容。 –

回答

2

val說你不能改變一度被分配到data。這是對數組的引用,所以data將始終指向相同的數組,但數組本身是可變的,您可以隨時更改其內容。