繁体   English   中英

引用其他变量的Ruby变量

[英]Ruby variables referencing other variables

我有两个变量,一个( b )引用另一个( a )。 当我用方法修改a时, b也被修改:

a = "TEXT"
b = a
print b
#=> TEXT   
a.downcase!
print b
#=> text

但是,当我直接修改ab保留其值:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM