Вложенные модули и классы в Ruby - это в основном организационный выбор.Сравните это
class A; end
class B; end
и это
class A
class B; end
end
Между ними есть только два различия
- Во втором примере вы должны написать
A::B
для доступа к B
- Во втором примере константы, к которым обращаются в
B
, будут просмотрены в A
, прежде чем они будут найдены в верхнем уровне
Есливы на самом деле хотите, чтобы экземпляры этих классов были связаны, вам нужны отношения подкласса и суперкласса между ними, т.е.
class B < A; end
теперь экземпляры B
могут обращаться к методам и переменным экземплярав A
.Обратите внимание, что это не зависит от вложенности, вы можете определить это как
class A
class B < A; end
end
, но опять-таки это только организационная разница.
На совершенно отдельной заметке это
class A
@x = nil
@y = nil
end
делает не делает то, что вы думаете, он делает.Это устанавливает переменные экземпляра для самого A
, то есть обрабатывает A
как экземпляр A.singleton_class
.Если вы хотите значения по умолчанию для экземпляров из A
, вы должны установить их в initialize
:
class A
def initialize
@x = nil
@y = nil
end
end