请看下面的代码:
val names = Set("Mike", "Jack")
names += "Jeff"
会报错:
error: reassignment to val
我看到有些书上说+=
其实是一个方法,代码可以是:
val names = Set("Mike", "Jack")
names.+=("Jeff")
如果 +=
是一个方法,为什么它会分配“名称”?
最佳答案
scala.collection.mutable.Set 有 += 方法。因此,无论是 val 还是 var,您都只是在基础集合上调用一个方法。但是 scala.collection.immutable.Set 没有 += 方法但是有 + 方法。 += 在 Scala 中有特殊含义;它可以像这样应用,names = names + "Jeff",因为这是对 val 'names' 的重新分配,所以编译器会报告错误。
示例(应用 + 并在 += 的位置完成重新分配)
class Test(num: Int) {
def +(n: Int) = new Test(num + n);
override def toString = num.toString
}
defined class Test
val foo = new Test(5)
foo: Test = 5
foo += 4
error: reassignment to val
foo += 4
^
var bar = new Test(5)
bar: Test = 5
bar += 4
bar
res12: Test = 9
关于scala - "+="会不会重新分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3350087/