Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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:

  1. Como ruta relativa:

    • foo o self::foo hacen referencia a foo en el módulo corriente,
    • super::foo hace referencia a foo en el módulo superior.
  2. Como ruta absoluta:

    • crate::foo hace referencia a foo en la raíz del crate corriente,
    • bar::foo hace referencia a foo en el crate bar.
This slide should take about 8 minutes.
  • 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 que

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

    haciendo que DiskStorage y NetworkStorage 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étodo read_to_string en un tipo que implemente el trait Read, 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.