Scala中重新分配和更新参数之间的区别

时间:2014-11-27 00:00:50

标签: scala var

这是一个很好的代码 -

现在我的问题是 - 如果我将Class Vector的参数声明为val,并将Vector v1的新值分配给v1(1) = 10 - 我的错误为{ {1}}。

为避免我从error: reassignment to val更改参数类型var。到目前为止,我理解这个概念是将参数声明为valval变为不可变,我无法为Class分配新值。

即使我将val声明为参数类型,我仍然无法更新varvector v1的值。我需要另外v2method来更新def update的值。为什么这样?

更新值与重新分配值不同,反之亦然。没有Vector v1 or v2我的错误为def update method

我缺少什么概念?

error: value update is not a member of this.Vector

1 个答案:

答案 0 :(得分:2)

要实现的是v1(1) = 10,这实际上是v1.update(1, 10)的语法糖。

这不仅适用于您的类型,即使是Scala collections也是如此。

因此,当您编写v1(1) = 10时,如果您没有为您的班级定义update方法,编译器会抱怨。

如果您只是希望能够更新您的向量,只要v1.x = 10x一起声明,就没有什么可以阻止您做var没有受到保护或私密。