2012-01-15 34 views
4

有人请向我解释为什么ArrayBuffer的padTo方法不能像我期望的那样工作?在这个例子中,我希望通过指定者创建的阵列以具有10奇怪的ArrayBuffer行为

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) 

回答

2

scaladoc

回报:类型的新集合即由这个arraybuffer接着ELEM 的出现最小数量的 所有元素的,使得所得集合具有至少LEN的长度。

因此,即使是可变的b也不会改变。

4

如果你看一下documentation,你会看到其中的差别:

def append (elems: A*): Unit

使用情况下(附加):追加给定元素到此缓冲区。

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

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

追加返回单位,而padTo 回报新ArrayBuffer