Модули служат двум целям.Во-первых, как вы заметили, необходимо разрешить добавление функциональных возможностей к разнообразному набору классов (различное значение вне дерева наследования).Второе, гораздо более распространенное использование - это организация пространства имен.Когда вы видите код, подобный ActiveRecord::Base
или BSON::ObjectID
, авторы этих драгоценных камней помещают свои функциональные возможности в модуль ActiveRecord
и BSON
соответственно, что предотвращает конфликт их имен классов с приложениями, в которые они включены или другимибиблиотеки.
С парсером, который вы упомянули, мне кажется, что вы хотите создать синглтон-класс, а не модуль.