如何在 ruby 中获取 class 常量名称

How to get class constant name in ruby

我需要从中获取常量名称:

class Sex
    Male = 1
    Female = 2
end

但这是完美的变体,我可以至少从中得到常量名称吗:

class Sex
    self.Male = 1
    self.Female = 2
end

关于问题的一些细节:

但我不知道如何获得 class 常量名称。

class Sex
  Male = 1
  Female = 2
end

这在 Sex class 上定义了两个常量。 SexClass 的一个实例, Class 的超 class 是 Module:

c = Sex.class  # => Class
c.superclass   # => Module

您已经知道如何从模块中获取常量名称数组作为符号,并且由于此方法是继承的,因此您只需在 Sex class:

Sex.constants  # => [:Male, :Female]

我不确定你的第二个例子。假设你的意思是 (read about class << self):

class Sex
  class << self
    Male = 1
    Female = 2
  end
end

这在 singleton class of the Sex class. The method Object#singleton_class returns 对象的单例 class 上定义了两个常量。之后 methodsinstance_variablesconstants 可以用通常的方式调用:

Sex.singleton_class.constants  # => [:Male, :Female]

您可以在 Class 对象上使用 constants 以及如下所示

class Sex
    Male = 1
    Female = 2
end

p Sex.constants # will return [:Male, :Female]

它起作用的原因是 Module 恰好是 Class

的基数 class
p Sex.class.ancestors
#=> [Class, Module, Object, Kernel, BasicObject]