加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 我可以检测到一种方法已经被覆盖了吗?

发布时间:2020-12-16 22:15:22 所属栏目:百科 来源:网络整理
导读:假设这里有一些我不知道的任意库代码: class Foo def hi endendclass Bar Foo def hi endend 并且假设我有一些代码,在这里我通过了Bar作为参数. def check(x) do_something_with(x.method(:hi))end 在上面的例子中,我可以知道x.hi(其中x引用了Bar的一个实例
假设这里有一些我不知道的任意库代码:
class Foo
  def hi
  end
end

class Bar < Foo
  def hi
  end
end

并且假设我有一些代码,在这里我通过了Bar作为参数.

def check(x)
  do_something_with(x.method(:hi))
end

在上面的例子中,我可以知道x.hi(其中x引用了Bar的一个实例)与Foo#hi不同

根据加雷斯的回答,这是我到目前为止

def is_overridden?(method)
  name = method.name.to_sym
  return false if !method.owner.superclass.method_defined?(name)
  method.owner != method.owner.superclass.instance_method(name).owner
end

可怕?华丽?

解决方法

你可以这样做:
if x.method(:hi).owner == Foo

我远不是Ruby专家;如果有人比这更好,我不会感到惊讶.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读