我需要从中得到不变的名字:
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 常量名称。
答案 0 :(得分:1)
class Sex
Male = 1
Female = 2
end
这定义了Sex
类上的两个常量。 Sex
是Class
的一个实例,Class
的超类是Module
:
c = Sex.class # => Class
c.superclass # => Module
您已经知道如何从模块中获取常量名称数组作为符号,并且由于此方法是继承的,您可以在Sex
类上调用它:
Sex.constants # => [:Male, :Female]
我不确定你的第二个例子。假设你的意思是这个(read about class << self
):
class Sex
class << self
Male = 1
Female = 2
end
end
这在Sex
类的singleton class上定义了两个常量。方法Object#singleton_class
返回对象的单例类。之后methods
,instance_variables
或constants
可以通常的方式调用:
Sex.singleton_class.constants # => [:Male, :Female]
答案 1 :(得分:1)
您可以在constants
对象上使用Class
以及如下所示
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]