首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的ArrayBuffer行为

奇怪的ArrayBuffer行为
EN

Stack Overflow用户
提问于 2012-01-16 01:58:39
回答 3查看 900关注 0票数 4

有人能给我解释一下为什么ArrayBuffer的padTo方法不能像我期望的那样工作吗?在本例中,我期望toArray创建的数组的长度为10。

代码语言:javascript
复制
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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-16 02:00:55

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

试一试

代码语言:javascript
复制
var c = b.padTo(10,0)

c.toArray

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

票数 5
EN

Stack Overflow用户

发布于 2012-01-16 02:09:11

如果你看一下documentation,你会看到不同之处:

def append (elems: A*): Unit

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

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

用例(padTo):将元素值附加到此数组缓冲区,直到达到给定的目标长度。

Append 返回单元,而padTo 返回新的ArrayBuffer

票数 4
EN

Stack Overflow用户

发布于 2012-01-16 02:03:10

来自scaladoc

返回:是一个新的集合缓冲区类型,它由这个数组的所有元素组成,后面跟着最少出现的elem,这样得到的集合的长度至少为

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8871959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档