Ваш вопрос касается одной из главных особенностей дизайна языка Ruby.
По сути, вы можете видеть модуль как набор инструментов, а класс - как набор объектов, которые могут смешиваться с этими инструментами.
Ruby faq говорит о модулях:
Модули - это наборы методов и констант.Они не могут генерировать экземпляры.
Если вы хотите предоставить что-то , вам понадобится класс.Вы можете сделать MyClass.new
, вы не можете с модулем: MyModule.new
не будет работать.
С другой стороны:
Классы могут генерировать экземпляры (объекты) и иметь состояние для каждого экземпляра (переменные экземпляра).
Если вы хотите предоставить способ что-то сделать , вам понадобится модуль.Вы можете сделать MyModule.doSomething(SomeParams)
.Вы также можете сделать это с помощью методов класса, но вы не сможете с ним что-то смешать.
Более подробный ответ см. в этом FAQ .