Синтаксис Ruby, вложенные модули или классы

Я новичок в Ruby, но просматривал некоторый исходный код. Я натолкнулся на вид структур, показанных ниже в некотором исходном коде (имена модулей, классов, а не реальных)

module ModuleOne

class MyClass

module CommonModule

# code ....

end # module CommonModule

end # class MyClass

end # module ModuleOne

или этот пример

module ModuleOne

  class MyClass

    class MyClassTwo

#code  ............

  end #class MyClassTwo

    end #class MyClass

      end #module ModuleOne

Из моего прочтения я знаю о переносе классов в модули, но я не слышал о видах переноса (например, модули внутри модулей или классы в классах), показанных выше. Могу ли я спросить: 1. Это хорошая практика и обычно это делается? 2. В чем преимущество структурирования кода таким способом?

Спасибо за любые комментарии или указатели

Дейв

1 ответ

Вложенность выполняется для инкапсуляции констант, модули которых являются частными случаями. Другими словами, они используются для пространства имен. Если вы хотите, чтобы определенный модуль был доступен только в контексте определенного модуля, вы должны сделать вложение. Таким образом, этот модуль не будет доступен по умолчанию извне; для этого вам придется поставить префикс пространства имен. Когда у вас слишком много уровней вложенности или когда тело модуля длинное, становится трудно следовать за ним в коде, поэтому хорошим способом в этом случае является запись всего пространства имен.

module ModuleOne
  ...
end

class ModuleOne::MyClass
  ...
end

class ModuleOne::MyClass::MyClassTwo
  ...
end
Другие вопросы по тегам