2012-01-15 11 views
4

ArrayBufferのpadToメソッドが期待通りに動作しない理由を教えてもらえますか?この例では、私はpadToが新しいシーケンスを返すためのtoArrayによって作成された配列が10strange 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) 

答えて

5

の長さを持つことが期待される(それは既存のものを変化させません):

をお試しください
var c = b.padTo(10,0) 

c.toArray 

も参照してください:https://issues.scala-lang.org/browse/SI-2257

2

scaladocから:

戻り:得られたコレクションは、少なくともLENの長さを有するように のすべての要素のこのarraybufferからなることELEM のオカレンスの最小数、続いてその型の新しいコレクション

したがって、bは変更可能でもありません。

def append (elems: A*): Unit

ユースケース(追加):このバッファに指定した要素を追加し、あなたがdocumentationを見れば

4

は、あなたは違いが表示されます。

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

ユースケース(padTo):所与の目標長さに達するまで、このarraybufferにエレメント値を追加します。

追加はユニットを返しますが、padTo は新しいArrayBufferを返します。