簡體   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