ruby – 检测方法未被覆盖
发布时间:2020-12-16 22:53:06 所属栏目:百科 来源:网络整理
导读:说,我有以下两个类: class A def a_method endendclass B Aend 是否有可能从类B的内部(实例)中检测到方法a_method仅在超类中定义,因此不会在B中被覆盖? 更新:解决方案 虽然我已经将Chuck的答案标记为“已接受”,但后来Paolo Perrota让我意识到解决方案显
说,我有以下两个类:
class A def a_method end end class B < A end 是否有可能从类B的内部(实例)中检测到方法a_method仅在超类中定义,因此不会在B中被覆盖? 更新:解决方案 虽然我已经将Chuck的答案标记为“已接受”,但后来Paolo Perrota让我意识到解决方案显然可以更简单,并且它可能也适用于早期版本的Ruby. 检测B中是否覆盖了“a_method”: B.instance_methods(false).include?("a_method") 对于类方法,我们类似地使用singleton_methods: B.singleton_methods(false).include?("a_class_method") 解决方法
如果您使用的是Ruby 1.8.7或更高版本,则可以使用Method#owner / UnboundMethod#owner轻松实现.
class Module def implements_instance_method(method_name) instance_method(method_name).owner == self rescue NameError false end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |