Как Ruby обрабатывает наследование для вложенных классов? - PullRequest
5 голосов
/ 19 июля 2011

В следующем тестовом примере:

class Package
    class Component
        def initialize
            p [:initialize,self]
        end
    end
end

class Package_A < Package
end

class Package_B < Package
end

# Why are the following components of type Package and not Package_A and Package_B
component=Package_A::Component.new
p component

component=Package_B::Component.new
p component

Результат:

[:initialize, #<Package::Component_1:0x2c0a8f8>]
#<Package::Component:0x2c0a8f8>
[:initialize, #<Package::Component_1:0x2c0a5b0>]
#<Package::Component:0x2c0a

Как получить конкретные Package_A.component и Package_B.component?

1 Ответ

6 голосов
/ 19 июля 2011

Класс Component объявлен в Package, поэтому кажется правильным.:: говорит искать имя Component в области действия Package_A.Поскольку там нет Component, он ищет суперкласс.

В этом примере показано, как добиться того, чего вы хотите.Может быть, есть более простой способ, я был бы счастлив увидеть его.Надеюсь, это поможет.

...