ObjectSpace._id2ref方法真正返回什么?

时间:2013-04-18 17:03:26

标签: ruby ruby-1.9.3

我有一个例子:

def a
   puts "Hello"
end
r = ObjectSpace._id2ref(a.object_id) # r is a reference to a
r == a #=> true
r #=> nil

为什么不能用a来呼叫r

1 个答案:

答案 0 :(得分:1)

您无法按名称获取方法引用。将a传递给#_id2ref时,a在您的示例中为零,因为Ruby正在尝试查找名为a.class => nil r.class => nil 的局部变量。

r == a

因此,r因为a#a都是零。

但是,您可以使用#method

来引用> r = ObjectSpace._id2ref(method(:a).object_id) => #<Method: Object#a> > r == method(:a) => true > r.call Hello => nil
{{1}}