Одни модули могут содержать другие:
mod my_module{ pub mod inner_module{ pub fn test(){ println! ("Hello from inner_module"); } } } fn main(){ my_module::inner_module::test(); }
Стоит учитывать, что вложенный модуль, как и другой функционал модуля, по умолчанию приватный. Поэтому опять же, чтобы сделать модуль доступным из вне, он определяется с ключевым словом pub. А при обращении к функционалу модуля указываются весь путь к функционалу с учетом внешнего и вложенных модулей:
my_module::inner_module::test();
Ключевое слово super применяется для обращения к родительскому модулю. Через super
мы можем обращаться в том числе и к приватным функциям родительского модуля:
mod parent_module{ pub mod child_module{ pub fn test(){ super::hello(); // обращаемся к функции из родительского модуля } } fn hello(){ println!("Hello"); } } fn main(){ parent_module::child_module::test(); }
Здесь родительский модуль parent_module
содержит приватную функцию hello
и публичный модуль child_module
.
Внутри вложенного модуля child_module
через super мы можем обратиться к родительскому модулю parent_module
,
например, к его функции hello:
super::hello();