当需要引入很多定义于相同包或相同模块的项时,为每一项单独列出一行会占用源码很大的空间。
// --snip--
use std::cmp::Ordering;
use std::io;
// --snip--
#
# fn main() {
# println!("Guess the number!");
#
# let secret_number = rand::thread_rng().gen_range(1..101);
#
# println!("The secret number is: {}", secret_number);
#
# println!("Please input your guess.");
#
# let mut guess = String::new();
#
# io::stdin()
# .read_line(&mut guess)
# .expect("Failed to read line");
#
# println!("You guessed: {}", guess);
#
# match guess.cmp(&secret_number) {
# Ordering::Less => println!("Too small!"),
# Ordering::Greater => println!("Too big!"),
# Ordering::Equal => println!("You win!"),
# }
# }
相反,我们可以使用嵌套路径将相同的项在一行中引入作用域。这么做需要指定路径的相同部分,接着是两个冒号,接着是大括号中的各自不同的路径部分.
// --snip--
use std::{cmp::Ordering, io};
// --snip--
#
# fn main() {
# println!("Guess the number!");
#
# let secret_number = rand::thread_rng().gen_range(1..101);
#
# println!("The secret number is: {}", secret_number);
#
# println!("Please input your guess.");
#
# let mut guess = String::new();
#
# io::stdin()
# .read_line(&mut guess)
# .expect("Failed to read line");
#
# let guess: u32 = guess.trim().parse().expect("Please type a number!");
#
# println!("You guessed: {}", guess);
#
# match guess.cmp(&secret_number) {
# Ordering::Less => println!("Too small!"),
# Ordering::Greater => println!("Too big!"),
# Ordering::Equal => println!("You win!"),
# }
# }
在较大的程序中,使用嵌套路径从相同包或模块中引入很多项,可以显著减少所需的独立 use 语句的数量!
我们可以在路径的任何层级使用嵌套路径,这在组合两个共享子路径的 use 语句时非常有用。
use std::io::Write;
两个路径的相同部分是 std:: io,这正是第一个路径。