请参阅以下代码:
val names = Set("Mike", "Jack")
names += "Jeff"
会出现错误:
error: reassignment to val
我在一些书中看到,+=
实际上是一种方法,代码可以是:
val names = Set("Mike", "Jack")
names.+=("Jeff")
如果+=
是一种方法,为什么要指定“名称”?
答案 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