gpt4 book ai didi

module - 何时/为什么需要导入 Rust 特征 `use` d/Imported

转载 作者:行者123 更新时间:2023-12-03 11:25:58 25 4
gpt4 key购买 nike

何时/为什么需要 Rust 特征 use d/Imported,或者为什么这个问题没有意义?
我是一位经验丰富的程序员,但我是 Rust 新手。
我正在努力通过The Rust Programming Language -- 在 chapter 2有以下说法。

First, we add a use line: use rand::Rng. The Rng 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com