Как разрешается конфликт имён в Ruby?
Ruby - удобный язык, но есть и косяки.
Меня беспокоит, что модули подключаются подобно сишным #include
. Не до конца ясно, как разрешать конфликты имён.
Если подключать два файла с одинаковыми именами методов/классов, то они просто перетираются последним. Хотя это бывает удобно, но с подключаемыми файлами лучше вести иначе.
Есть ключевое слово module
, похоже на пространство имён. И с помощью него можно спастись от затирания. Но я провёл эксперимент: если объявить модули, то при подключении модулей с одинаковыми именами происходит молчаливое перетирание функций и классов с одинаковыми именами.
Конечно есть такой вариант: весь распространяемый код должен содержаться в модуле с уникальным названием.
Собственно вопрос. Как в Ruby принято решать такие проблемы? Что ещё мне нужно знать о модульной системе Ruby?