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:
foo
ouself::foo
referem-se àfoo
no módulo atual,super::foo
refere-se àfoo
no módulo pai.
-
Como um caminho absoluto:
crate::foo
refere-se àfoo
na raiz do crate atual,bar::foo
refere-se afoo
no cratebar
.
-
É comum “re-exportar” símbolos em um caminho mais curto. Por exemplo, o nível superior
lib.rs
em um crate pode termod storage; pub use storage::disk::DiskStorage; pub use storage::network::NetworkStorage;
tornando
DiskStorage
eNetworkStorage
disponí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_string
em um tipo que implementa o traitRead
, você precisause std::io::Read
. -
A instrução
use
pode 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.