El sistema de módulos en Rust se basa en la palabra clave mod. Los módulos permiten dividir lógicamente el código en archivos y espacios de nombres. Puntos clave:
pub hace que un elemento sea público para todo el árbol de módulos.pub(crate) — accesible dentro de todo el crate (es decir, la biblioteca/proyecto).use mod_name::item) y alias.Para proyectos grandes, se recomienda usar un árbol de módulos con la descripción de las interfaces públicas solo a través de lib.rs o main.rs, el resto es privado:
mod network; mod storage; pub use network::api;
Si una estructura se declara como pub, ¿será accesible para otros crates?
Respuesta: No, no es suficiente con marcar la struct como pub. También debe ser declarada en un módulo expuesto a otros crates (pub mod), y los campos de la estructura deben ser públicos para tener acceso directo a ellos.
Ejemplo:
mod foo { pub struct Bar; } // Bar no es visible fuera del crate, ya que foo es privado
Historia
Historia
use * ciegamente, surgieron conflictos de nombres en tiempo de compilación. La solución fue la adición de alias y la importación solo de los elementos necesarios.Historia
Muchos principiantes crean estructuras pub, pero dejan los campos como private, lo que hace imposible su inicialización fuera del módulo. Como resultado, una función desde otro módulo no podía crear la estructura directamente, lo que provocaba errores, hasta que se hicieron públicos los campos o constructores.