Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby常量和嵌套类_Ruby - Fatal编程技术网

Ruby常量和嵌套类

Ruby常量和嵌套类,ruby,Ruby,我试图理解下面的内容会产生什么。根据,此代码将返回A1 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

我试图理解下面的内容会产生什么。根据,此代码将返回A1

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
A1级
Const=“A1”
结束
A2级
在您的例子中,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


因此,当你把一个类放在另一个类中时,你不是继承而是嵌套类,它并不是说它们是在其他类(如
A1
)中搜索的,这完全违背了名称空间的目的。尝试完全限定名--
::A1::Const
。但是根据IRHG,它将返回A1,为什么在我运行代码时它没有返回它。我想您指的是“常量和嵌套类”部分中显示的图形。这是错误的。但是根据IRHG,它将返回A1,为什么在我运行代码时它没有返回它。
A3.superclass
#=> A2
A2.superclass
#=> A1