这是一个很好的代码 -
现在我的问题是 - 如果我将Class Vector
的参数声明为val
,并将Vector v1
的新值分配给v1(1) = 10
- 我的错误为{ {1}}。
为避免我从error: reassignment to val
更改参数类型var
。到目前为止,我理解这个概念是将参数声明为val
,val
变为不可变,我无法为Class
分配新值。
即使我将val
声明为参数类型,我仍然无法更新var
或vector v1
的值。我需要另外v2
,method
来更新def update
的值。为什么这样?
更新值与重新分配值不同,反之亦然。没有Vector v1 or v2
我的错误为def update method
。
我缺少什么概念?
error: value update is not a member of this.Vector
答案 0 :(得分:2)
要实现的是v1(1) = 10
,这实际上是v1.update(1, 10)
的语法糖。
这不仅适用于您的类型,即使是Scala collections也是如此。
因此,当您编写v1(1) = 10
时,如果您没有为您的班级定义update
方法,编译器会抱怨。
如果您只是希望能够更新您的向量,只要v1.x = 10
与x
一起声明,就没有什么可以阻止您做var
没有受到保护或私密。