use, super, self
Um módulo pode trazer símbolos de outro módulo para o escopo com use. Normalmente, você verá algo assim na parte superior de cada módulo:
use std::collections::HashSet; use std::process::abort;
Caminhos (Paths)
Caminhos são resolvidos da seguinte forma:
-
Como um caminho relativo:
fooouself::fooreferem-se àfoono módulo atual,super::foorefere-se àfoono módulo pai.
-
Como um caminho absoluto:
crate::foorefere-se àfoona raiz do crate atual,bar::foorefere-se afoono cratebar.
-
É comum “re-exportar” símbolos em um caminho mais curto. Por exemplo, o nível superior
lib.rsem um crate pode termod storage; pub use storage::disk::DiskStorage; pub use storage::network::NetworkStorage;tornando
DiskStorageeNetworkStoragedisponíveis para outros crates com um caminho conveniente e curto. -
Na maior parte, apenas itens que aparecem em um módulo precisam ser
use. No entanto, um trait deve estar no escopo para chamar quaisquer métodos nesse trait, mesmo que um tipo que implemente esse trait já esteja no escopo. Por exemplo, para usar o métodoread_to_stringem um tipo que implementa o traitRead, você precisause std::io::Read. -
A instrução
usepode ter um curinga:use std::io::*. Isso é desencorajado porque não está claro quais itens são importados, e eles podem mudar ao longo do tempo.