ruby – 在类和它的某个祖先之间定义的实例方法
发布时间:2020-12-17 02:40:26 所属栏目:百科 来源:网络整理
导读:假设类A是类B的后代.获取B中定义的A的所有实例方法的列表(符号数组,顺序无关紧要)的最佳方法是什么,即在B或任何上定义的A的实例方法它的后代类?示例如下.类层次结构如下: class C; def c; end endclass B C; def b; end endclass D B; def d; end endclass
假设类A是类B的后代.获取B中定义的A的所有实例方法的列表(符号数组,顺序无关紧要)的最佳方法是什么,即在B或任何上定义的A的实例方法它的后代类?示例如下.类层次结构如下:
class C; def c; end end class B < C; def b; end end class D < B; def d; end end class A < D; def a; end end 各种类中A的实例方法是: A.instance_methods_within(Kernel) # => (Same as A.instance_methods) A.instance_methods_within(C) # => [:a,:d,:b,:c] A.instance_methods_within(B) # => [:a,:b] A.instance_methods_within(D) # => [:a,:d] A.instance_methods_within(A) # => [:a] (Same as A.instance_methods(false)) 解决方法
我相信你在寻找这个:
class Class def instance_methods_within(klass) return self.instance_methods if klass == Object methods = [] this = self while this != nil methods << this.instance_methods(false) break if this == klass this = this.superclass end return methods.flatten end end class C; def c; end end class B < C; def b; end end class D < B; def d; end end class A < D; def a; end end A.instance_methods_within(Object) # => (Same as A.instance_methods) A.instance_methods_within(C) # => [:a,:d] A.instance_methods_within(A) # => [:a] (Same as A.instance_methods(false)) 我添加了Object as Object.instance_methods(false)yield []的特殊情况,因此在这种情况下向上遍历的循环不会很好.更新以将instance_methods_within类定义为Class的实例方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |