ruby – 检测方法未被覆盖

前端之家收集整理的这篇文章主要介绍了ruby – 检测方法未被覆盖前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
说,我有以下两个类:
  1. class A
  2. def a_method
  3. end
  4. end
  5.  
  6. class B < A
  7. end

是否有可能从类B的内部(实例)中检测到方法a_method仅在超类中定义,因此不会在B中被覆盖?

更新:解决方

虽然我已经将Chuck的答案标记为“已接受”,但后来Paolo Perrota让我意识到解决方案显然可以更简单,并且它可能也适用于早期版本的Ruby.

检测B中是否覆盖了“a_method”:

  1. B.instance_methods(false).include?("a_method")

对于类方法,我们类似地使用singleton_methods:

  1. B.singleton_methods(false).include?("a_class_method")

解决方法

如果您使用的是Ruby 1.8.7或更高版本,则可以使用Method#owner / UnboundMethod#owner轻松实现.
  1. class Module
  2. def implements_instance_method(method_name)
  3. instance_method(method_name).owner == self
  4. rescue NameError
  5. false
  6. end
  7. end

猜你在找的Ruby相关文章