如何在Scala中创建不可变的2D数组

时间:2017-07-03 07:04:17

标签: scala

我有以下课程:

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

2 个答案:

答案 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 xval x)与可变/不可变集合之间存在差异。声明一个(变量)不会影响另一个(集合)。

Scala Array继承自Java,因此是可变的。有许多精美的不可变集合。 Array不是其中之一。