0

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

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

4

2 回答 2

4

我究竟做错了什么?

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

human = Mammal::Human.new
human.class.const_get(:H) # => "Human"
于 2013-01-10T15:11:12.563 回答
1

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

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

human.class::H

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

于 2013-01-10T15:13:56.553 回答