Ruby 原始变量仍随.clone或.dup更改
当我执行这个程序时,原始的夫妇列表和新的夫妇列表总是相同的。我认为使用.clone或.dup应该是一种在不更改原始变量的情况下进行复制的方法。为什么会发生在这里Ruby 原始变量仍随.clone或.dup更改,ruby,Ruby,当我执行这个程序时,原始的夫妇列表和新的夫妇列表总是相同的。我认为使用.clone或.dup应该是一种在不更改原始变量的情况下进行复制的方法。为什么会发生在这里 def swingers(couples) original_couples = couples new_couples = original_couples.clone swap_index1 = rand(3) swap_index2 = rand(3) new_couples[swa
def swingers(couples)
original_couples = couples
new_couples = original_couples.clone
swap_index1 = rand(3)
swap_index2 = rand(3)
new_couples[swap_index1][0], new_couples[swap_index2][0] = new_couples[swap_index2] [0], new_couples[swap_index1][0]
puts original_couples
puts new_couples
end
swingers([
["Clyde", "Bonnie"],
["Paris", "Helen"],
["Romeo", "Juliet"]
])
Ruby中的
dup
或clone
是浅层克隆,这意味着只克隆外部对象,而不克隆其子对象。在您的例子中,这意味着将复制对
数组,但不会复制每个单独的对
如果希望它是深度克隆,则需要为stdlib阵列手动执行此操作:
new_couples = original_couples.map { |couple| couple.clone }
如果您所在的领域经常需要集合的副本,或者您正试图以更具功能性的方式工作,那么我建议您看看将不可变数据结构引入ruby的