我有一个像这样的嵌套类:
class Mammal
H = "Mammal"
class Human
H = "Human"
end
end
我想制作一个Human对象,然后访问Human的常量,就像这样:
human = Mammal::Human.new # makes an object successfully
puts human::H # does not work **
puts Mammal::Human::H # works ["Human"]
puts Mammal::H # works ["Mammal"]
** ..但它不起作用(“..不是类/模块[TypeError]”)。我做错了什么?
答案 0 :(得分:3)
我做错了什么?
您试图从错误的上下文中引用常量。常量在类对象中定义,而不是在实例中定义。这有效:
human = Mammal::Human.new
human.class.const_get(:H) # => "Human"
答案 1 :(得分:1)
常量属于类,因此通过::
运算符的常量分辨率仅适用于类对象,而不适用于类的实例。
话虽如此,你可以这样做:
human.class::H
Object#class
返回对象的类,相对于该类可以解析常量。