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

前端之家收集整理的这篇文章主要介绍了ruby – 我可以检测到一种方法已经被覆盖了吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设这里有一些我不知道的任意库代码
  1. class Foo
  2. def hi
  3. end
  4. end
  5.  
  6. class Bar < Foo
  7. def hi
  8. end
  9. end

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

  1. def check(x)
  2. do_something_with(x.method(:hi))
  3. end

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

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

  1. def is_overridden?(method)
  2. name = method.name.to_sym
  3. return false if !method.owner.superclass.method_defined?(name)
  4. method.owner != method.owner.superclass.instance_method(name).owner
  5. end

可怕?华丽?

解决方法@H_301_18@
你可以这样做:
  1. if x.method(:hi).owner == Foo

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

猜你在找的Ruby相关文章