Los módulos permiten definir la visibilidad :
- Los elementos del módulo son privados por defecto (oculta los detalles de implementación).
- Los elementos de padres y hermanos siempre están visibles.
- En otras palabras, si un elemento es visible en el módulo foo, será visible en todos los descendientes de foo.
mod outer {
fn private() {
println!("outer::private");
}
pub fn public() {
println!("outer::public");
}
mod inner {
fn private() {
println!("outer::inner::private");
}
pub fn public() {
println!("outer::inner::public");
super::private();
}
}
}
fn main() {
outer::public();
}
Podemos utilizar la palabra clave pub para hacer públicos los módulos. Además, existen especificadores pub(...) avanzados para restringir el alcance de la visibilidad pública.