[英]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.