首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Ruby类中列出包含的模块?

如何在Ruby类中列出包含的模块?
EN

Stack Overflow用户
提问于 2010-08-16 01:24:13
回答 1查看 11.8K关注 0票数 22

在Ruby的类层次结构中,如何列出包含在特定类中的模块?如下所示:

代码语言:javascript
复制
module SomeModule
end

class ParentModel < Object
  include SomeModule
end

class ChildModel < ParentModel
end

p ChildModel.included_modules #=> [SomeModule]
p ChildModel.included_modules(false) #=> []

列出祖先会使模块在树中的位置更靠前:

代码语言:javascript
复制
p ChildModel.ancestors #=> [ChildModel, ParentModel, SomeModule, Object, Kernel]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-16 02:13:02

据我所知,这就是你要找的东西:

代码语言:javascript
复制
class Class
  def mixin_ancestors(include_ancestors=true)
    ancestors.take_while {|a| include_ancestors || a != superclass }.
    select {|ancestor| ancestor.instance_of?(Module) }
  end
end

但是,我不能完全理解您的测试用例:为什么SomeModule被列为ChildModel的一个包含模块,尽管它实际上并没有包含在ChildModel中,而是包含在ParentModel中?相反,为什么Kernel没有被列为包含的模块,即使它在祖先链中与SomeModule一样多?方法的布尔型参数是什么意思?

(请注意,布尔参数总是糟糕的设计:一个方法应该只做一件事。如果它接受一个布尔参数,根据定义它会做两件事,一是如果参数为真,另一件是参数为假。或者,如果它只做了一件事,那么这只能意味着它忽略了它的参数,在这种情况下,它不应该一开始就接受它。)

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3488429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档