首页 > 解决方案 > 重新分配的哈希更改了原始哈希

问题描述

为什么变量会a发生变化,我该如何防止它?

a = []       # => []
b = a        # => []
b << :hello  # => [:hello]
p a          # => [:hello]

# >> [:hello]

我看到使用克隆的响应,并想知道为什么下面的工作以及在哪些情况下需要和不需要 .clone

a = "string"   # => "string"
b =a           # => "string"
b = "changed"  # => "changed"
a              # => "string"

标签: ruby

解决方案


为什么变量会a发生变化,我该如何防止它?

a = []       # => []
b = a        # => []
b << :hello  # => [:hello]
p a          # => [:hello]
# >> [:hello]

变量a没有改变。可以更改变量的唯一方法Binding#local_variable_set是分配给它(忽略像 一样的反射),您没有这样做。因此,a不改变。

两者引用并更改的对象。但是改变对象和改变变量是完全不同的两件事。 ab

我看到使用克隆的响应,并想知道为什么下面的工作以及在哪些情况下需要和不需要 .clone

a = "string"   # => "string"
b =a           # => "string"
b = "changed"  # => "changed"
a              # => "string"

这是有效的,因为您从不更改对象。你改变变量。


推荐阅读