use, super, self

Модуль може залучати символи з іншого модуля до області видимості за допомогою use. Зазвичай ви бачите щось подібне у верхній частині кожного модуля:

use std::collections::HashSet;
use std::process::abort;

Шляхи

Шляхи вирішуються таким чином:

  1. Як відносний шлях:

    • foo або self::foo посилається на foo в поточному модулі,
    • super::foo посилається на foo у батьківському модулі.
  2. Як абсолютний шлях:

    • crate::foo посилається на foo в корені поточного крейту,
    • bar::foo посилається на foo в крейті bar.
This slide should take about 8 minutes.
  • Зазвичай символи "реекспортуються" коротшим шляхом. Наприклад, файл lib.rs верхнього рівня у крейті може мати

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

    зробити DiskStorage і NetworkStorage доступними для інших крейтів зручним і коротким шляхом.

  • Здебільшого використовувати use потрібно лише з тими елементами, які з'являються в модулі. Однак, щоб викликати будь-які методи, трейт повинен бути в області видимості, навіть якщо тип, що реалізує цей трейт, вже знаходиться в області видимості. Наприклад, для використання методу read_to_string на типі, що реалізує трейтRead, вам потрібно use std::io::Read.

  • Оператор use може мати символ підстановки: use std::io::*. Це не рекомендується, оскільки незрозуміло, які саме елементи імпортуються, а вони можуть змінюватися з часом.