Определение классов в модуле - PullRequest
1 голос
/ 26 мая 2011
module Vehicle
  class Car < Wheeled
  end
end

module Vehicle
  class Bike < Wheeled
  end
end

Чего пытается добиться этот шаблон создания классов, это то, чего я не могу понять. Каким будет недостаток в этом, если включить Vehicle в качестве модуля в другие классы?

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Делая так, вы сохраняете пространство имен этих классов в модуле Vehicle:

Car.new
# => NameError: uninitialized constant Object::Car
Vehicle::Car.new
# => #<Vehicle::Car:0x0000123456>

Таким образом, вы можете также иметь отдельный класс Car вне модуля, и класс Vehicle::Car не будет мешать.

0 голосов
/ 26 мая 2011

Этот шаблон группирует связанные классы в отдельное пространство имен для достижения более логичной структуры приложения и предотвращения конфликтов имен. Суперкласс-подкласс сильно отличается, хотя в вашем конкретном примере было бы лучше пойти по этому пути, потому что Car и Bike оба являются видом транспортного средства, но есть много ситуаций, когда это не так. Например, широко используется группировка всех классов приложений в одном модуле.

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