Ruby常量和嵌套类

时间:2012-03-20 14:19:19

标签: ruby

我正在努力了解以下内容会产生什么。根据{{​​3}},此代码将返回A1。

  

IRHG说:常数是在课外搜索。如果没有找到   在外面,然后在课堂内搜索。

但我在Ruby 1.8.7中得到以下消息

  

未初始化的常量A3 :: B3 :: C3 :: Const(NameError)

请您帮我理解一下吗?

class A1
    Const = "A1"
end
class A2 < A1
end
class A3 < A2
    #Const = "A3"
    class B1
    end
    class B2 < B1
    end
    class B3 < B2
        class C1
        end
        class C2 < C1
        end
        class C3 < C2
            p Const
        end
    end
end

1 个答案:

答案 0 :(得分:1)

在你的情况下,C3类不是从A3类继承的。 A3类只是C3的命名空间。

A3::B3::C3.superclass
#=> A3::B3::C2
A3::B3::C3.superclass.superclass
#=> A3::B3::C1
A3::B3::C3.superclass.superclass.superclass
#=> Object
# or you can look A3::B3::C3.ancestors for full map

虽然

A3.superclass
#=> A2
A2.superclass
#=> A1

因此,当您将一个类放入另一个类时,您不会继承,而是嵌套类