获取常量和子类

时间:2012-02-27 16:48:25

标签: ruby class module ruby-1.9

  1. 获取属于模块A的常量的最短方法是什么?如果我A.constants,它会给出一个A常量的符号化名称数组,而不是A常量数组。我特别想问这个因为ancestors,它更简单:A.ancestors回馈其祖先的数组,而不是祖先的符号名称数组。

  2. 获取类B的直接子类数组的最短方法是什么?

1 个答案:

答案 0 :(得分:1)

假设:

class A;        end
class A::B < A; end
  1. 使用const_get按符号访问模块的常量:

    A.constants.map { |constant| A.const_get constant }
    # => [A::B]
    
  2. 您可以在所有现有类中搜索子类:

    ObjectSpace.each_object(Class).select { |klass| klass.superclass == A }
    # => [A::B]
    ObjectSpace.each_object(Class).select { |klass| klass.superclass == A::B }
    # => []