5

可能重复:
在 Ruby 中查找一个类的所有后代

所以,假设我们有:

class LivingBeing
  class Animal
  end

  class Bacteria
  end

  class Virus
  end
end

class Fungi < LivingBeing
end

如何检查子类LivingBeing有哪些?我知道我们有Klass.ancestors,但是有什么方法可以看到祖先的反面?

4

1 回答 1

3

核心 Ruby 语言中没有内置任何东西可以做你想做的事——你需要自己编写。这是一个示例方法subclasses_of(class_name_here)(如下),它将为您返回特定类的子类列表:

class Mammal
end

class Human < Mammal
end

class Dog < Mammal
end

def subclasses_of input
  ObjectSpace.each_object(Class).select { |klass| klass < input }
end

subclasses_of(Mammal)
 #=> [Human, Dog]

顺便说一句,这里有这个问题的答案:

http://dzone.com/snippets/objectsubclasses

于 2012-10-17T22:22:54.797 回答