小编Kap*_*ade的帖子

Array#push导致大型数组的"堆栈级太深"错误

我制作了两个阵列,每个阵列有100万个项目:

a1 = 1_000_000.times.to_a
a2 = a1.clone
Run Code Online (Sandbox Code Playgroud)

我试图将a2推入a1:

a1.push *a2
Run Code Online (Sandbox Code Playgroud)

这回来了SystemStackError: stack level too deep.

但是,当我尝试使用时concat,我没有收到错误:

a1.concat a2
a1.length # => 2_000_000
Run Code Online (Sandbox Code Playgroud)

我也没有得到splat运算符的错误:

a3 = [*a1, *a2]
a3.length # => 2_000_000
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我查看了文档Array#push,并用C语言编写.我怀疑它可能是在引擎盖下进行一些递归,这就是为什么它会导致大型数组的这个错误.它是否正确?push用于大型阵列不是一个好主意吗?

ruby arrays

24
推荐指数
1
解决办法
808
查看次数

标签 统计

arrays ×1

ruby ×1