我制作了两个阵列,每个阵列有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用于大型阵列不是一个好主意吗?