防止Ruby中的副作用

时间:2013-07-14 10:14:44

标签: ruby

a = [1,2,3,4]
b = a << 5
a == [1,2,3,4] # returns false

如何将b分配到a,并在不修改5的情况下将a添加到最后?{/ p>

3 个答案:

答案 0 :(得分:9)

只需将两个数组相加:

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

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

答案 1 :(得分:6)

Ruby变量将引用保存到对象,=运算符复制引用

您似乎希望clone a

irb(main):001:0> a = [1,2,3,4]
=> [1, 2, 3, 4]
irb(main):002:0> b = a.clone << 5
=> [1, 2, 3, 4, 5]
irb(main):003:0> a
=> [1, 2, 3, 4]
irb(main):004:0> b
=> [1, 2, 3, 4, 5]

答案 2 :(得分:4)

我通常这样做:

b = [*a, 5]