我有一个例子:
def a
puts "Hello"
end
r = ObjectSpace._id2ref(a.object_id) # r is a reference to a
r == a #=> true
r #=> nil
为什么不能用a
来呼叫r
?
答案 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}}