Синтаксис 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