2012-03-20 75 views
-1

我试图理解下面会产生什么。根据IRHG,这段代码将返回A1。Ruby常量和嵌套类

IRHG说:常量是在班级以外的第一个搜索。如果没有找到 以外,那么在课堂内搜索。

但我在Ruby中得到了以下信息1.8.7

未初始化的常数A3 :: B3 :: C3 ::常量(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 
+2

他们正在寻找其他* *类像里面没有说'A1',这将完全击败命名空间的目的。尝试完全限定的名称 - “:: A1 :: Const”。 – 2012-03-20 14:24:06

+0

但是根据IRHG,它会返回A1,为什么当我运行代码时它没有返回它。 – Dean 2012-03-22 18:12:50

+0

我认为你指的是“常量和嵌套类”一节中显示的图形。这只是错误的。 – 2012-03-22 18:17:28

回答

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 

所以,当你把一个类中的另一个你不继承,但窝类

+0

但是根据IRHG,它会返回A1,为什么当我运行代码时它没有返回它。 – Dean 2012-03-22 18:13:04