2016-07-09 59 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将始终指向相同的数组,但数组本身是可变的,您可以随时更改其内容。