use, super, self
Модуль може залучати символи з іншого модуля до області видимості за допомогою use
. Зазвичай ви бачите щось подібне у верхній частині кожного модуля:
use std::collections::HashSet; use std::process::abort;
Шляхи
Шляхи вирішуються таким чином:
-
Як відносний шлях:
foo
абоself::foo
посилається наfoo
в поточному модулі,super::foo
посилається наfoo
у батьківському модулі.
-
Як абсолютний шлях:
crate::foo
посилається наfoo
в корені поточного крейту,bar::foo
посилається наfoo
в крейтіbar
.
-
Зазвичай символи "реекспортуються" коротшим шляхом. Наприклад, файл
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::*
. Це не рекомендується, оскільки незрозуміло, які саме елементи імпортуються, а вони можуть змінюватися з часом.