奇怪的 ArrayBuffer 行为

发布于 12-27 12:02 字数 620 浏览 4 评论 0原文

有人可以向我解释一下为什么 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)

Can someone please explain to me why the padTo method of ArrayBuffer doesn't work as I would expect it to? In this example, I would expect the array created by toArray to have a length of 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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

初见你2025-01-03 12:02:46

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

尝试

var c = b.padTo(10,0)

c.toArray

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

Because padTo returns a new sequence (it doesn't mutate the existing one):

Try

var c = b.padTo(10,0)

c.toArray

See also: https://issues.scala-lang.org/browse/SI-2257

北恋2025-01-03 12:02:46

如果您查看文档,您'您将看到差异:

def append (elems: A*): Unit

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

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

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

Append 返回 Unit,而 padTo 返回新的 ArrayBuffer

If you look at the documentation, you'll see the difference:

def append (elems: A*): Unit

Use case (append): Appends the given elements to this buffer.

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

Use case (padTo): Appends an element value to this arraybuffer until a given target length is reached.

Append returns Unit, while padTo returns new ArrayBuffer.

海拔太高太耀眼2025-01-03 12:02:46

来自 scaladoc

返回:一个新集合,其类型包含以下所有元素
该 arraybuffer 后跟 elem 出现的最少次数
这样生成的集合的长度至少为 len。

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

From scaladoc:

returns: a new collection of type That consisting of all elements of
this arraybuffer followed by the minimal number of occurrences of elem
so that the resulting collection has a length of at least len.

So, b, even mutable, does not changes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文