"+ ="会重新分配吗?

Fre*_*ind 2 scala

请参阅以下代码:

val names = Set("Mike", "Jack")
names += "Jeff"
Run Code Online (Sandbox Code Playgroud)

会有错误:

error: reassignment to val 
Run Code Online (Sandbox Code Playgroud)

我在一些书中看到,它说+=实际上是一种方法,代码可以是:

val names = Set("Mike", "Jack")
names.+=("Jeff")
Run Code Online (Sandbox Code Playgroud)

如果+=是一种方法,为什么要分配"名称"?

Mar*_*amy 10

scala.collection.mutable.Set有+ =方法.所以无论val还是var,你只是在底层集上调用一个方法.但scala.collection.immutable.Set没有+ =方法但有+方法.+ =在Scala中有特殊含义; 它可以像这样应用,names = names +"Jeff",因为这是重新分配给'name',编译器会报告错误.

示例(应用+并代替+ =重新分配)

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
Run Code Online (Sandbox Code Playgroud)