2016-02-06 20 views
0

我在試着理解Ruby非常微妙的傳遞值的實現......或者真正的按值引用。這是有道理的參數傳遞給一個方法時,但是當我遇到下面,我有點困惑:我如何在Ruby中看到一個對象的引用

person = {name: "Michael"} 
# => {:name => "Michael"} 

person.object_id 
# => 70366412279760 

full_name = person[:name] 
# => "Michael" 
full_name.object_id 
# => 70366412279780 

full_name << " Jordan" 
# => "Michael Jordan" 

person 
# => {:name => "Michael Jordan"} 

這怎麼可能? full_name如何包含對person對象的引用? Ruby中是否有方法可以「查看」變量的引用?

我已經習以爲常寫過類似上面的代碼,但現在我試圖進一步理解發生了什麼,我很難過。

+0

這完全是關於「綁定」。看看這裏的初學者 - http://ruby-doc.org/core-2.2.0/Binding.html – Jon

回答

4

full_name引用一個字符串對象(它也被person[:name]引用)。調用<<就可以修改該字符串對象,而不是將某些東西重新分配給名爲full_name的變量。

full_name本身並不包含其參考值爲:name中散列值person的值的信息。恰巧full_nameperson[:name]指向相同的對象(id)。

+1

哦......我沒有看到。這就說得通了!這就是爲什麼full_name.object_id與person [:name] .object_id相同......謝謝! –

相關問題