奇怪的ArrayBuffer行为

时间:2012-01-15 17:58:39

标签: arrays scala collections mutable arraybuffer

有人可以向我解释为什么ArrayBuffer的padTo方法不能像我期望的那样工作吗?在这个例子中,我希望toArray创建的数组的长度为10。

scala> val b = new scala.collection.mutable.ArrayBuffer[Byte]
b: scala.collection.mutable.ArrayBuffer[Byte] = ArrayBuffer()

scala> b.append(2)

scala> b
res1: scala.collection.mutable.ArrayBuffer[Byte] = ArrayBuffer(2)

scala> b.append(2)

scala> b
res3: scala.collection.mutable.ArrayBuffer[Byte] = ArrayBuffer(2, 2)

scala> b.padTo(10,0)
res4: scala.collection.mutable.ArrayBuffer[AnyVal] = ArrayBuffer(2, 2, 0, 0, 0, 0, 0, 0, 0, 0)

scala> b.toArray
res5: Array[Byte] = Array(2, 2)

3 个答案:

答案 0 :(得分:5)

因为padTo返回一个新序列(它不会改变现有序列):

尝试

var c = b.padTo(10,0)

c.toArray

另请参阅:https://issues.scala-lang.org/browse/SI-2257

答案 1 :(得分:4)

如果查看documentation,您会发现不同之处:

def append (elems: A*): Unit

用例(追加):将给定元素追加到此缓冲区。

def padTo (len: Int, elem: A): ArrayBuffer[A]

用例(padTo):将元素值追加到此arraybuffer,直到达到给定的目标长度。

附加返回单元,而padTo 返回新的ArrayBuffer

答案 2 :(得分:2)

来自scaladoc

  

返回:类型的新集合包含的所有元素   这个arraybuffer后跟elem的最小出现次数   这样得到的集合的长度至少为len。

所以,b,即使是可变的,也不会改变。