use, super, self
یک ماژول میتواند نمادها را از ماژول دیگری با use
وارد محدوده کند. شما معمولاً چیزی شبیه به این را در بالای هر ماژول خواهید دید:
use std::collections::HashSet; use std::process::abort;
مسیر
مسیرها (Paths) به شرح زیر حل میشوند:
-
به عنوان یک path نسبی:
- در واقع
foo
یاself::foo
بهfoo
در ماژول فعلی اشاره دارد، super::foo
refers tofoo
in the parent module.
- در واقع
-
به عنوان یک path مطلق:
crate::foo
بهfoo
در ریشه جعبه فعلی اشاره دارد,- یک
bar::foo
بهfoo
درbar
crate اشاره دارد.
-
این"re-export" نمادها در مسیر کوتاهتری معمول است. برای مثال،
lib.rs
سطح بالا در یک crate ممکن است داشته باشدmod storage; pub use storage::disk::DiskStorage; pub use storage::network::NetworkStorage;
در دسترس قرار دادن
DiskStorage
وNetworkStorage
برای سایر crateها با یک مسیر راحت و کوتاه. -
در بیشتر موارد، فقط مواردی که در یک ماژول ظاهر میشوند باید
use
شوند. با اینحال، یک ویژگی (trait) باید در محدوده باشد تا بتوان هر method ای را روی آن ویژگی فراخوانی کرد، حتی اگر نوعی که آن ویژگی را اجرا می کند قبلاً در محدوده باشد. به عنوان مثال، برای استفاده از متدread_to_string
در نوعی که ویژگیRead
را اجرا میکند، باید ازuse std::io::Read
استفاده کنید. -
عبارت
use
میتواند دارای علامت عام باشد:use std::io::*
. از این کار منع شده است زیرا مشخص نیست کدام موارد import میشوند و ممکن است در طول زمان تغییر کنند.