如何在 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.methods - Object.methods
- 可以获得实例变量列表:
instance_variables.map{|ivar| instance_variable_get ivar}
- 您可以从 Module 中获取常量名称列表:
Module.constants
但我不知道如何获得 class 常量名称。
class Sex
Male = 1
Female = 2
end
这在 Sex
class 上定义了两个常量。 Sex
是 Class
的一个实例, 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 上定义了两个常量。之后 methods
、instance_variables
或 constants
可以用通常的方式调用:
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]
我需要从中获取常量名称:
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 中获取常量名称列表:
Module.constants
但我不知道如何获得 class 常量名称。
class Sex
Male = 1
Female = 2
end
这在 Sex
class 上定义了两个常量。 Sex
是 Class
的一个实例, 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 上定义了两个常量。之后 methods
、instance_variables
或 constants
可以用通常的方式调用:
Sex.singleton_class.constants # => [:Male, :Female]
您可以在 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]