[英]Ruby variables referencing other variables
我有两个变量,一个( b
)引用另一个( a
)。 当我用方法修改a
时, b
也被修改:
a = "TEXT"
b = a
print b
#=> TEXT
a.downcase!
print b
#=> text
但是,当我直接修改a
, b
保留其值:
a = "TEXT"
b = a
print b
#=> TEXT
a = "Something Else"
print b
#=> TEXT
为什么直接修改最初引用的变量而不是使用方法来修改b
的行为?
这是在Ruby中做的不正确的事情吗,如果是这样,那么将一个变量与另一个变量进行引用会是更好的做法吗?
Ruby使用引用,您在其中犯了一个小错误。
这个:
a.downcase!
正如'bang'方法所建议的那样,它正在更改a
引用的值。 所以, a
仍然是引用同一个对象,它只是由downcase变了! 方法
但是这个:
a = "Something Else"
实际上是说给a
引用一个新对象,恰好也是一个字符串。 由于b
引用了另一个对象,并且该对象没有更改,因此它仍显示TEXT。
您可以使用object_id查看此处发生的情况。
a = "text"
a.object_id
=> 70200807828580
b = a
b.object_id
=> 70200807828580 # b points to the same object that a does.
a = "new"
a.object_id
=> 70200807766420 # a now points to a new object
b.object_id
=> 70200807828580 # b still points to the original object.
因此,您会看到变量实际上并不存储对象本身。 而是存储对象的ID。 这就是为什么如果您复制对象,通常只复制其ID而不是创建一个全新的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.