这是我试图理解的代码块+ =和++ =
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类型应该是常量而不是静态范围的特征?
答案 0 :(得分:2)
为了向ArrayBuffer
添加元素,您在那里使用了三种不同的功能。
++=
,来自doc
def ++ =(xs:TraversableOnce [A]):ArrayBuffer.this.type
附加可遍历对象提供的许多元素。
+=
,来自doc
来自doc 的def + =(elem:A):ArrayBuffer.this.type
将单个元素追加到此缓冲区并返回缓冲区的标识。
和重载的+=
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
。