ruby - 在 Ruby 中查找一个类的所有后代

标签 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 应用程序中找到所有继承自基类的模型并列出它们;我有一个 Controller 可以使用任何此类模型,我希望能够添加新模型而无需修改 Controller 。)

最佳答案

这是一个例子:

class Parent
  def self.descendants
    ObjectSpace.each_object(Class).select { |klass| klass < self }
  end
end

class Child < Parent
end

class GrandChild < Child
end

puts Parent.descendants
puts Child.descendants

puts Parent.descendants 给你:

GrandChild
Child

puts Child.descendants 给你:

GrandChild

关于ruby - 在 Ruby 中查找一个类的所有后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2393697/

相关文章:

ruby-on-rails - Ubuntu 未检测到 Rails 安装

ruby-on-rails - 上帝搞乱了日期操作

ruby-on-rails - CarrierWave 在文件列中保存 NULL

ruby - 在 Ruby 中处理 Nil

ruby - if + else 和 if -> unless 不一致

ruby-on-rails - 在 HAML 文档中的 Ruby 插值中拯救异常

ruby-on-rails - 是否有可能使example.herokuapp.com 无法进入,除非通过某些dns?

ruby - : Date. 如何解析 ("123 456 789") == 2019 年 5 月 3 日星期五?

ruby - 使用 Ruby 线程,但没有看到加速

mysql - Mysql 2 的 Rails 错误