Ruby从内部类访问常量

时间:2013-01-10 15:07:14

标签: ruby constants inner-classes

我有一个像这样的嵌套类:

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]”)。我做错了什么?

2 个答案:

答案 0 :(得分:3)

  

我做错了什么?

您试图从错误的上下文中引用常量。常量在类对象中定义,而不是在实例中定义。这有效:

human = Mammal::Human.new
human.class.const_get(:H) # => "Human"

答案 1 :(得分:1)

常量属于类,因此通过::运算符的常量分辨率仅适用于类对象,而不适用于类的实例。

话虽如此,你可以这样做:

human.class::H

Object#class返回对象的类,相对于该类可以解析常量。