Рубиновый стиль доступа к элементам модулей и классов - PullRequest
1 голос
/ 14 июля 2010
module Hints
    module Designer
        def self.message
            "Hello, World!"
        end
    end
end

есть ли способ использовать следующий код для доступа к методу сообщения?

p Hints.Designer.message

Вместо

p Hints::Designer.message

Ответы [ 2 ]

5 голосов
/ 14 июля 2010

Точка . предназначена только для доступа к методам.

Двойное двоеточие :: используется для обозначения пространств имен.

Оба модуля и классы могут быть вложены друг в друга. Это создает пространство имен для вложенного класса. (Технически, Module является экземпляром Class.) Таким образом, следующее является правильным, независимо от того, являются ли Hints или Designer классом или модулем.

Hints::Designer.message

Вы можете попробовать себя, открыв irb в командной строке. Hints.Designer.message говорит NoMethodError: undefined method 'Designer' for Hints:Module.

Обновление (поскольку я не могу комментировать ...) :

Несмотря на то, что многие вещи в Ruby могут быть перезаписаны («исправлено обезьяной»), базовые операторы не могут. :: - это базовая языковая функция, которая настраивается и не должна настраиваться (для предотвращения большого беспорядка;)) .

1 голос
/ 14 июля 2010

Вы можете использовать точку для доступа к методу message, но вы не можете использовать его для доступа к модулю Designer, поскольку Designer это не метод (а константа). Точка предназначена только для вызова методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...