Точка .
предназначена только для доступа к методам.
Двойное двоеточие ::
используется для обозначения пространств имен.
Оба модуля и классы могут быть вложены друг в друга. Это создает пространство имен для вложенного класса. (Технически, Module является экземпляром Class.) Таким образом, следующее является правильным, независимо от того, являются ли Hints или Designer классом или модулем.
Hints::Designer.message
Вы можете попробовать себя, открыв irb
в командной строке. Hints.Designer.message
говорит NoMethodError: undefined method 'Designer' for Hints:Module
.
Обновление (поскольку я не могу комментировать ...) :
Несмотря на то, что многие вещи в Ruby могут быть перезаписаны («исправлено обезьяной»), базовые операторы не могут. ::
- это базовая языковая функция, которая настраивается и не должна настраиваться (для предотвращения большого беспорядка;)) .