use, super, self

یک ماژول می‌تواند نمادها را از ماژول دیگری با use وارد محدوده کند. شما معمولاً چیزی شبیه به این را در بالای هر ماژول خواهید دید:

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

مسیر

مسیرها (Paths) به شرح زیر حل می‌شوند:

  1. به عنوان یک path نسبی:

    • در واقع foo یا self::foo به foo در ماژول فعلی اشاره دارد،
    • super::foo refers to foo in the parent module.
  2. به عنوان یک path مطلق:

    • crate::foo به foo در ریشه جعبه فعلی اشاره دارد,
    • یک bar::foo به foo در bar crate اشاره دارد.
This slide should take about 8 minutes.
  • این"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 می‌شوند و ممکن است در طول زمان تغییر کنند.