“+ =”会重新分配吗?

时间:2010-07-28 05:12:20

标签: scala

请参阅以下代码:

val names = Set("Mike", "Jack")
names += "Jeff"

会出现错误:

error: reassignment to val 

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

val names = Set("Mike", "Jack")
names.+=("Jeff")

如果+=是一种方法,为什么要指定“名称”?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

一个简短的回答:

scala> val names = collection.mutable.Set("Mike", "Jack")
names: scala.collection.mutable.Set[java.lang.String] = Set(Jack, Mike)

scala> names += "Jeff"
res23: names.type = Set(Jack, Jeff, Mike)

或者您可以像这样导入可变集:

import scala.collection.mutable.Set