我可以轻松提升 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/