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:

  1. Como um caminho relativo:

    • foo ou self::foo referem-se Ă  foo no mĂłdulo atual,
    • super::foo refere-se Ă  foo no mĂłdulo pai.
  2. Como um caminho absoluto:

    • crate::foo refere-se Ă  foo na raiz do crate atual,
    • bar::foo refere-se a foo no crate bar.
This slide should take about 8 minutes.
  • É comum “re-exportar” sĂ­mbolos em um caminho mais curto. Por exemplo, o nĂ­vel superior lib.rs em um crate pode ter

    mod storage;
    
    pub use storage::disk::DiskStorage;
    pub use storage::network::NetworkStorage;

    tornando DiskStorage e NetworkStorage 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Ă©todo read_to_string em um tipo que implementa o trait Read, vocĂȘ precisa use 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.