use, super, self
Un módulo puede incluir símbolos de otro módulo en el ámbito con use
. Normalmente, se ve algo como esto en la parte superior de cada módulo:
use std::collections::HashSet; use std::process::abort;
Rutas
Las rutas se resuelven de la siguiente manera:
-
Como ruta relativa:
foo
oself::foo
hacen referencia afoo
en el módulo corriente,super::foo
hace referencia afoo
en el módulo superior.
-
Como ruta absoluta:
crate::foo
hace referencia afoo
en la raíz del crate corriente,bar::foo
hace referencia afoo
en el cratebar
.
-
Es habitual "volver a exportar" los símbolos en una ruta más corta. Por ejemplo, el archivo
lib.rs
de nivel superior de un crate puede hacer quemod storage; pub use storage::disk::DiskStorage; pub use storage::network::NetworkStorage;
haciendo que
DiskStorage
yNetworkStorage
estén disponibles para otros crates con una ruta corta y práctica. -
La mayoría de las veces, únicamente deben ser
use
los elementos que aparecen en un módulo. Sin embargo, un trait debe encontrarse dentro del ámbito para llamar a cualquier método de ese trait, incluso aunque ya haya un tipo que implemente dicho trait dentro del ámbito. Por ejemplo, para usar el métodoread_to_string
en un tipo que implemente el traitRead
, debes usar std::io::Read`. -
La instrucción
use
puede tener un comodín:use std::io::*
. No se recomienda su uso porque no está claro qué elementos se importan y cuáles podrían cambiar con el tiempo.