【发布时间】:2013-11-27 21:00:21
【问题描述】:
我在编程方面是个外行,并且对 ruby 很陌生,但无论如何我觉得它对我的工作很有用。目前我正在编写一个相当大的脚本,它带来了以下意想不到的效果:
def my_reduce_method(value_hash,some_keys)
value_hash.delete(some_keys)
end
puts all_values
=> all_values
some_values = all_values # start my block with all values (class: hash)
some_values = my_reduce_method(some_values,keys_to_reduce)
# here only some_values should be effected!
puts all_values
=> some_values
就在方块中没有损坏,但原来的all_values丢失了!如何确保在某个代码块中某个变量绝对没有改变?
提前感谢您的任何意见!!!
【问题讨论】:
-
您发布的代码中的任何内容都不会修改
all_values,所以我猜my_reduce_method中的某些内容正在修改它。 -
这是 all_values 的浅拷贝。那就是问题所在。 my_reduce_method 正在修改 some_values,它指向的数据与 all_values 指向的数据相同。
-
没有充分的理由投反对票。我见过的第一次发布海报中最合适的问题。
-
@Plasmarob,并且像往常一样,没有为否决票提供任何解释/理由。
-
一种简单的方法来制作任何对象
o的深层副本,可以是dup'ed:Marshal.load(Marshal.dump(o))。
标签: ruby variables variable-assignment