Объявление Модуля Ruby
есть ли разница между
class Bus::Driver
end
и
module Bus
class Driver
end
end
Если нет, какой синтаксис предпочтительнее?
3 ответов
есть ли разница между doing [...]?
единственная разница в том, что в class Bus::Driver
на Bus
модуль должны будет уже определен, а не стоять на второй.
какой синтаксис предпочтительнее?
это не конструктивный вопрос, но я лично предпочитаю второй, потому что он явно заявляет, что Bus
модуль, а с первым я не вижу на первый взгляд если Bus
модуль или класс.
это, само по себе:
class Bus::Driver
end
приведет к ошибке NameError: uninitialized constant Bus
так в какой-то момент Вы должны объявить class Bus
или module Bus
. Однако это не обязательно должна быть полная иерархия каждый раз.
у меня есть раннее требование, которое устанавливает пространства имен, а затем использует более сжатую форму в остальных моих файлах. Я не знаю, что есть какой - либо предпочтительный подход-определенно ничего, за что вас критиковали бы.
первый синтаксис предпочтительнее, когда у вас есть различные классы модуля, разбросанные по нескольким файлам в проекте; и при условии module
всегда определяется в PATH
. Например, при создании gem
.
второе более центральное, и должно быть сделано, когда речь идет о деталях. module
не только включать class
, Он включает в себя methods
и constants
etc для пространства имен тоже, что полезно.