ArrayBuffer ++ =使用Array for val type属性的操作

时间:2015-11-09 06:42:51

标签: scala

这是我试图理解的代码块+ =和++ =

scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer

scala> val a = ArrayBuffer[Int]()
a: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()


scala> a += 1
res0: a.type = ArrayBuffer(1)

scala> a += (2,3,4);
res1: a.type = ArrayBuffer(1, 2, 3, 4)

scala>  a ++= Array(5,6,7)
res4: a.type = ArrayBuffer(1, 2, 3, 4, 5, 6, 7)

scala中的 ++ = 运算符是什么?它是如何工作的?为什么val允许合并另一个数组,因为val类型应该是常量而不是静态范围的特征?

1 个答案:

答案 0 :(得分:2)

为了向ArrayBuffer添加元素,您在那里使用了三种不同的功能。

++=,来自doc

  

def ++ =(xs:TraversableOnce [A]):ArrayBuffer.this.type

     

附加可遍历对象提供的许多元素。

+=,来自doc

  

def + =(elem:A):ArrayBuffer.this.type

     

将单个元素追加到此缓冲区并返回缓冲区的标识。

来自doc

和重载的+=

  

def + =(elem1:A,elem2:A,elems:A *):ArrayBuffer.this.type

     

为此可增长的集合添加两个或更多元素。

val a是不可变的,您实际上是将元素添加到可变ArrayBuffer,而不更改对变量a的引用。

修改

scala> val a = ArrayBuffer[Int]()
a: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()

scala> a += 1
res1: a.type = ArrayBuffer(1)

scala> a
res38: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1)

scala> a = ArrayBuffer[Int]()
<console>:33: error: reassignment to val
       a = ArrayBuffer[Int]()
         ^

如上所述,当您使用+=时,您不会将基础引用更改为val a