请看下面的代码:“+ =”会重新分配还是不分配?
val names = Set("Mike", "Jack")
names += "Jeff"
将会有一个错误:
error: reassignment to val
我在一些书看,它说+=
实际上是一种方法,该代码可以是:
val names = Set("Mike", "Jack")
names.+=("Jeff")
如果+=
是一种方法,为什么会分配“名称”?
请看下面的代码:“+ =”会重新分配还是不分配?
val names = Set("Mike", "Jack")
names += "Jeff"
将会有一个错误:
error: reassignment to val
我在一些书看,它说+=
实际上是一种方法,该代码可以是:
val names = Set("Mike", "Jack")
names.+=("Jeff")
如果+=
是一种方法,为什么会分配“名称”?
scala.collection.mutable.Set has + = method。所以不管是val还是var,你只是在底层集合上调用一个方法。但scala.collection.immutable.Set没有+ =方法,但有+方法。 + =在Scala中有特殊含义;它可以像这样应用,names = names +“Jeff”,因为这是重新分配给val'名称',编译器报告错误。
实施例(+被施加并重新分配在适当的位置做+ =的)
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> 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
非常感谢你! – Freewind 2010-07-28 07:31:35
@Freewind,欢迎光临! – 2010-07-28 09:25:01