如何在Ruby中查看对象的引用

时间:2016-02-06 23:45:31

标签: 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中是否有一种方法,你可以&#34;看到&#34;变量的引用?

我过去认为像上面那样编写代码是理所当然的,但现在我正在努力进一步了解发生了什么,我很难过。

1 个答案:

答案 0 :(得分:4)

full_name指的是一个字符串对象(也由person[:name]引用)。在其上调用<<会修改该字符串对象,而不是将某些内容重新分配给名为full_name的变量。

full_name本身并不包含其指示对象是散列:nameperson的值的信息。恰好full_nameperson[:name]指向同一个对象(id)。