0

我有一个例子:

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

那么为什么无法调用awithr呢?

4

1 回答 1

1

您不能像这样按名称获取方法引用。a当您将它传递给 时,在您的示例中为 nil #_id2ref,因为 Ruby 试图找到一个名为a.

a.class => nil
r.class => nil

因此,r == a因为两者ra都是零。

但是,您可以参考#awith #method

> r = ObjectSpace._id2ref(method(:a).object_id)
 => #<Method: Object#a>
> r == method(:a)
 => true
> r.call
Hello
 => nil
于 2013-04-18T17:07:45.207 回答