Ruby。如何知道哪个类实例方法被定义?

3

我想知道class method_missing是定义在哪个类中的。 它是在Object类中定义的。

我该如何找出沿着继承层次结构,哪个类覆盖了它?

1个回答

6

您可以使用UnboundMethod#owner方法来检查该方法的实现位置:

class A
  def method_missing(*args)
    # do something
  end
end
method = A.instance_method(:method_missing)
method.owner
# => A

注意:如果该方法实现在模块中(稍后会混入类层次结构的某个地方),owner将返回该模块。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Marek Lipka
我指的是您的变量method的值,它显示为#<UnboundMethod: A#method_missing>,显示了所有者A。同样地,在class B<A; end; class C<B; end中,C.instance_method(:method_missing) => #<UnboundMethod: C(A)#method_missing>,再次显示A作为所有者。正确吗? - Cary Swoveland
是的,这正是 OP 想要的。 - Marek Lipka
我的意思只是你不必添加 .owner 就能看到所有者是谁。 - Cary Swoveland
哦,你说得对。虽然调用 owner 可以让人清楚地理解,所以我认为我的答案不需要修改。 - Marek Lipka
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接