Рубиновые константы и вложенные классы - PullRequest
0 голосов
/ 20 марта 2012

Я пытаюсь понять, что произойдет. Согласно IRHG , этот код вернет 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 Ответ

1 голос
/ 20 марта 2012

В вашем случае класс 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

Поэтому, когда вы помещаете один класс в другой, вы не наследуете, а вкладываете классы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...