在Ruby中查找类的所有后代

我可以轻松地提升Ruby中的类层次结构:


String.ancestors     # [String, Enumerable, Comparable, Object, Kernel]

Enumerable.ancestors # [Enumerable]

Comparable.ancestors # [Comparable]

Object.ancestors     # [Object, Kernel]

Kernel.ancestors     # [Kernel]

有什么办法可以降低层次结构吗?我想这样做


Animal.descendants      # [Dog, Cat, Human, ...]

Dog.descendants         # [Labrador, GreatDane, Airedale, ...]

Enumerable.descendants  # [String, Array, ...]

但似乎没有descendants方法。


(出现这个问题是因为我想在一个来自基类的Rails应用程序中找到所有模型并列出它们;我有一个可以与任何此类模型一起使用的控制器,并且我希望能够添加新模型无需修改控制器。)


慕田峪9158850
浏览 618回答 3
3回答

慕森王

这是一个例子:class Parent&nbsp; def self.descendants&nbsp; &nbsp; ObjectSpace.each_object(Class).select { |klass| klass < self }&nbsp; endendclass Child < Parentendclass GrandChild < Childendputs Parent.descendantsputs Child.descendants放置Parent.descendants给您:GrandChildChild把Child.descendants给你:GrandChild
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby