Un módulo puede incorporar símbolos de otros módulos con use. Normalmente verá algo como esto en la parte superior de cada módulo:
use std::collections::HashSet;
use std::process::abort;
Paths:
Los paths se pueden resolver de la siguiente manera:
- Como ruta relativa:
foo o self::foo se refiere a foo del módulo actual,
super::foo se refiere a foo en el módulo principal.
- Como camino absoluto:
crate::foo se refiere a foo de la raíz del proyecto actual,
bar::foo se refiere a foo en la caja de bar.
Es común “reexportar” símbolos en una ruta más corta. Por ejemplo, las bibliotecas de nivel superior en una caja podrían tener
mod storage;
pub use storage::disk::DiskStorage;
pub use storage::network::NetworkStorage;
haciendo que DiskStorage y NetworkStorage estén disponibles para otras cajas con una ruta corta y conveniente.
En su mayor parte, sólo es necesario utilizar los elementos que aparecen en un módulo. Sin embargo, un rasgo debe estar dentro del alcance para llamar a cualquier método en ese rasgo, incluso si un tipo que implementa ese rasgo ya está dentro del alcance. Por ejemplo, para usar el método read_to_string en un tipo que implementa el rasgo de lectura, debe usar std::io::Read.
La declaración de uso puede tener un comodín: use std::io::*. Se desaconseja esto porque no está claro qué artículos se importan y estos pueden cambiar con el tiempo.