Рубиновые вложенные классы и модули - PullRequest
3 голосов
/ 14 мая 2010

Я знаком с концепцией вложения классов и модулей в другой модуль и группировки их в пространстве имен. Какова идея / цель

  1. Вложение классов в другом классе

    class A
      class B
        def method_B
          ...
        end
      end
    end
    
  2. Вложенные модули в другом классе

    class A
      module c
        def method_c
          ...
        end
      end
    end
    

спасибо, пепел

Ответы [ 2 ]

3 голосов
/ 14 мая 2010

Классы также являются пространствами имен, так что это та же идея. Class является подклассом Module, поэтому если вы получаете его в контексте модулей, вы также получаете его в контексте классов.

1 голос
/ 14 мая 2010

Все дело в группировке проблем, связанных с выявлением разумной семантики. В качестве примера с номером 1 HTTP :: Request (класс Request, встроенный в больший класс протокола HTTP) - это совсем не то, что FTP :: Request. С модулями это позволяет использовать общую рубиновую идиому Behavior :: InstanceMethods и Behavior :: ClassMethods для обработки миксинов.

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