Одни модули могут содержать другие:
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();