如何确保数组操作是通过值而不是ruby中的引用来完成的?

时间:2016-02-05 11:09:44

标签: arrays ruby

我是红宝石的新手,想知道我该怎么做呢

例如:

a = [1,2,3,4]
b = []

b.push(a)
a.pop
a.pop

print b
# => [[1,2]]

我期待b保持[[1,2,3,4]]

似乎是通过引用推入b而不是值。无论我将来做什么,我都希望保持原样;我如何在Ruby中执行此操作?

2 个答案:

答案 0 :(得分:3)

a是一个数组引用,因此要将其推送到b,您需要复制它:

b.push(a.dup)

这类似于在C中使用strdup,其中字符串是指针。

答案 1 :(得分:1)

您可以使用splat运算符并将a的元素推送到b而不是整个数组a

b.push(*a)
#=> [1, 2, 3, 4]

如果您想推送数组,请使用

b.push([*a])
#=> [[1, 2, 3, 4]]