何时/为什么需要 Rust 特征 use
d/Imported,或者为什么这个问题没有意义?
我是一位经验丰富的程序员,但我是 Rust 新手。
我正在努力通过The Rust Programming Language -- 在 chapter 2有以下说法。
First, we add a
use
line:use rand::Rng
. TheRng
trait defines methods that random number generators implement, and this trait must be in scope for us to use those methods. Chapter 10 will cover traits in detail.
强调我的。
我不清楚为什么这个程序
use std::io;
use rand::Rng;
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);
}
需要use rand::Rng
.当我们use/imported
std::io
符号,我们可以访问 io
我们可以调用相关函数的符号。io::stdin
在我幼稚(且不正确)的观点中,使用 use rand::Rng
会给我们一个Rng
象征。相反,我们得到了 rand
我们可以称之为 thread_rng
的符号方法上。let secret_number = rand::thread_rng().gen_range(1, 101);
我的幼稚观点是为了调用 thread_rng
,我们需要做类似的事情use rand;
// or
use rand::rand
作为程序员,当我输入 use rand::Rng
时,我在做什么?在我的程序中,为什么这与 use std::io
不同?
最佳答案
rand
"symbol"是外部 crate 的名称,它位于根命名空间中,与任何 use
无关。陈述。它定义了一个函数 thread_rng()
这也是可用的(通过 rand::
的命名空间限定),无论您的 use
陈述。
因此,即使没有您的 use 语句,您也可以执行以下操作:
let thread_rng = rand::thread_rng();
但是,thread_rng
返回 rand::rngs::ThreadRng
结构,您试图在其上调用 gen_range
——这个函数是一个 trait 方法,直到 rand::Rng
才在作用域内。特征是通过 use
引入的陈述。即使没有
use
,实际上也可以调用 trait 方法。声明:rand::Rng::gen_range(&mut rand::thread_rng(), 1, 101);
...但一般来说,use
干净多了。
关于module - 何时/为什么需要导入 Rust 特征 `use` d/Imported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63349653/