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



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

class Sex
    Male = 1
    Female = 2
end

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

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

关于这个问题的一些细节:

  • 您可以获得方法列表:Class.methods - Object.methods
  • 您可以获得实例变量列表:instance_variables.map{|ivar| instance_variable_get ivar}
  • 您可以从模块:Module.constants获取常量名称列表

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

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

class Sex
    Male = 1
    Female = 2
end
p Sex.constants # will return [:Male, :Female]

它工作的原因是Module恰好是Class 的基类

p Sex.class.ancestors
#=> [Class, Module, Object, Kernel, BasicObject]
class Sex
  Male = 1
  Female = 2
end

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

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

您已经知道如何从模块中获得作为符号的常量名称数组,并且由于此方法是继承的,因此您可以在Sex类上调用它:

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

我不确定你的第二个例子。假设你是认真的(阅读class << self(:

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

这在Sex类的singleton类上定义了两个常量。方法Object#singleton_class返回对象的singleton类。之后,methodsinstance_variablesconstants可以用通常的方式调用:

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

相关内容

  • 没有找到相关文章

最新更新