請看下面的代碼:「+ =」會重新分配還是不分配?
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