0
我有一個例子:ObjectSpace._id2ref方法真的返回什麼?
def a
puts "Hello"
end
r = ObjectSpace._id2ref(a.object_id) # r is a reference to a
r == a #=> true
r #=> nil
爲什麼那麼就不可能叫a
與r
?
我有一個例子:ObjectSpace._id2ref方法真的返回什麼?
def a
puts "Hello"
end
r = ObjectSpace._id2ref(a.object_id) # r is a reference to a
r == a #=> true
r #=> nil
爲什麼那麼就不可能叫a
與r
?
您不能按照那樣的名稱獲取方法引用。當你將它傳遞給#_id2ref
時,a
在你的例子中是零,因爲Ruby試圖找到一個名爲a
的局部變量。
a.class => nil
r.class => nil
因此,r == a
因爲兩者r
和a
是零。
但是,你可以得到一個#method
參考#a
:
> r = ObjectSpace._id2ref(method(:a).object_id)
=> #<Method: Object#a>
> r == method(:a)
=> true
> r.call
Hello
=> nil
這不是紅寶石嘗試和失敗找到名爲'了'一個局部變量,而該方法'了'被調用,它返回'nil'(因爲'puts'返回'nil')。 – matt
哦,很好。你完全正確。 –