Ruby子类中返回覆盖方法的数组
发布时间:2020-12-17 04:11:09 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 class Object def self.overridden_methods(parent_class = Object,within_tree = true) if within_tree defined_methods = ancestors[0..ancestors.i
|
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 class Object
def self.overridden_methods(parent_class = Object,within_tree = true)
if within_tree
defined_methods = ancestors[0..ancestors.index(parent_class) - 1].map { |object| object.instance_methods(false) }.flatten.uniq
parent_methods = superclass.instance_methods
else
defined_methods = instance_methods(false)
parent_methods = parent_class.instance_methods
end
defined_methods & parent_methods
end
def overridden_methods(parent_class = Object,within_tree = true)
self.class.overridden_methods(parent_class,within_tree)
end
def self.overrides?(method,parent_class = Object,within_tree = true)
overridden_methods(parent_class,within_tree).include?(method.to_s)
end
def overrides?(method,within_tree = true)
self.class.overrides?(method,parent_class,within_tree)
end
end
class ParentModel < Object
def save; end
end
class ChildModel < ParentModel
def save; end
def create; end
def to_s; end
end
class AnotherChildModel < ParentModel
def save; end
end
class GrandChildModel < ChildModel
def create; end
end
# what have you overridden from the base `Object` class
p ParentModel.overridden_methods(Object)
#=> []
p ParentModel.overridden_methods(Object,false)
#=> []
p ChildModel.overridden_methods(Object)
#=> ["to_s","save"]
p ChildModel.overridden_methods(Object,false)
#=> ["to_s"]
p ChildModel.overridden_methods(ParentModel)
#=> ["to_s","save"]
p ChildModel.overridden_methods(ParentModel,false)
#=> ["to_s","save"]
p AnotherChildModel.overridden_methods(Object)
#=> ["save"]
p AnotherChildModel.overridden_methods(Object,false)
#=> []
p AnotherChildModel.overridden_methods(ParentModel)
#=> ["save"]
p AnotherChildModel.overridden_methods(ParentModel,false)
#=> ["save"]
p GrandChildModel.overridden_methods(Object)
#=> ["create","to_s","save"]
p GrandChildModel.overridden_methods(Object,false)
#=> []
p GrandChildModel.overridden_methods(ParentModel)
#=> ["create","save"]
p GrandChildModel.overridden_methods(ParentModel,false)
#=> []
p GrandChildModel.overridden_methods(ChildModel)
#=> ["create"]
p GrandChildModel.overridden_methods(ChildModel,false)
#=> ["create"]
以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
