В Ruby нет вложенных классов.
Единственный способ наследовать поведение - это наследование.
Если вы хотите, чтобы ваш код работал, вам нужно использовать языккоторый поддерживает вложенные классы.Хотя это невероятно аккуратная и мощная функция, я, к сожалению, знаю только о двух языках, которые имеют вложенные классы:
Я не знаю других.
В Java есть конструкция, называемая вложенными классами, но у них есть некоторые неудачные конструктивные ограничения.
В приведенном выше примере это не класс B
, который вложен в A
, это константа B
, которая вложена в A
.Подумайте об этом:
C = A::B
Теперь класс доступен под двумя именами: A::B
и C
.Должно быть сразу очевидно, что C
является глобальным и не вложен в A
.(Ну, на самом деле, C
вложено в Object
, потому что на самом деле глобальных констант тоже нет, но это не относится к делу.) Но поскольку C
и A::B
- это один и тот же класс, очевидно, что это невозможнокак вложенные, так и не вложенные.Единственный логический вывод заключается в том, что сам класс не является вложенным.
Отличительной особенностью вложенных классов является то, что поиск метода идет по двум измерениям: вверх по цепочке наследования и наружу черезвложенности.Ruby, как и 99,9% всех ОО-языков, поддерживает только первый.(В некотором смысле вложенные классы наследуют не только свойства своего суперкласса, но также и свойства окружающего их класса.)