我有以下课程:
class Matrix(val matrix: Array[Array[Int]]) {
// some other methods
override def toString: String = {
return matrix.map(_.mkString(" ")).mkString("\n")
}
}
我已将类变量声明为val
,以防止在matrix
中进一步修改。
object Main {
def main(args: Array[String]) {
val > = Array
val x: Array[Array[Int]] = >(
>(1, 2, 3),
>(4, 5, 6),
>(7, 8, 9))
val m1 = new Matrix(x)
println("m1 -->\n" + m1)
x(1)(1) = 101 // Need to prevent this type of modification.
println("m1 -->\n" + m1)
}
}
执行x(1)(1) = 101
后,程序的输出为
m1 -->
1 2 3
4 101 6
7 8 9
但是我想阻止这种修改并将原始矩阵作为
m1 -->
1 2 3
4 5 6
7 8 9
答案 0 :(得分:2)
不是使用Array,也许你可以使用List,它是不可变的:
scala> val num:List[Int] = List(1,2,3)
num: List[Int] = List(1, 2, 3)
scala> num(1) = 3
<console>:13: error: value update is not a member of List[Int]
num(1) = 3
^
答案 1 :(得分:0)
可变/不可变变量(例如var x
和val x
)与可变/不可变集合之间存在差异。声明一个(变量)不会影响另一个(集合)。
Scala Array
继承自Java,因此是可变的。有许多精美的不可变集合。 Array
不是其中之一。