我可以很容易地提升在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應用程序中的所有模型,它們從基類中下來並列出它們;我有一個可以與任何這樣的模型一起工作的控制器,我希望能夠以添加新型號而無需修改控制器。)
這很好,謝謝!我想如果你想減少毫秒,訪問每個類可能會太慢,但對我而言,這是非常快速的。 – 2010-03-06 20:01:34
'singleton_class'而不是'Class'使其更快(請參閱http://apidock.com/rails/Class/descendants處的源代碼) – brauliobo 2015-05-09 00:41:44
如果您可能遇到類未被加載到內存中的情況,請小心,'ObjectSpace'不會有。 – 2016-04-05 02:01:45