use, super, self
A module can bring symbols from another module into scope with use. You will
typically see something like this at the top of each module:
use std::collections::HashSet; use std::process::abort;
Paths
Paths are resolved as follows:
- 
As a relative path: - fooor- self::foorefers to- fooin the current module,
- super::foorefers to- fooin the parent module.
 
- 
As an absolute path: - crate::foorefers to- fooin the root of the current crate,
- bar::foorefers to- fooin the- barcrate.
 
- 
It is common to “re-export” symbols at a shorter path. For example, the top-level lib.rsin a crate might havemod storage; pub use storage::disk::DiskStorage; pub use storage::network::NetworkStorage;making DiskStorageandNetworkStorageavailable to other crates with a convenient, short path.
- 
For the most part, only items that appear in a module need to be use’d. However, a trait must be in scope to call any methods on that trait, even if a type implementing that trait is already in scope. For example, to use theread_to_stringmethod on a type implementing theReadtrait, you need touse std::io::Read.
- 
The usestatement can have a wildcard:use std::io::*. This is discouraged because it is not clear which items are imported, and those might change over time.