什么时候/为什么需要使用/导入Rust特性(trait),或者为什么这个问题没有意义?
我是一名有经验的程序员,但我是Rust的新手。
我正在阅读《Rust编程语言》--在第2章中有以下声明。
首先,我们添加一个
use
行:use rand::Rng
。Rng
特性定义了随机数生成器实现的方法,必须让该特性处于当前作用域才能使用这些方法。第10章将详细介绍特性。
重���强调。
我不清楚为什么这个程序
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);
}
需要使用 rand::Rng
。当我们使用/导入
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
有何不同?
ThreadRng
是否实现了Rng
特性的gen_range
方法?我在 rand crate 中找不到任何证据。 即使是这样,为什么我们在结构体上定义了方法后仍然需要使用特性呢?是为了帮助 Rust 进行命名空间限定吗? - ShridharshanRngCore
trait的类型,Rng
trait都会自动实现。这回答了我在上面评论中提出的第一个问题,尽管我不确定我的理解是否正确。 - Shridharshanpub mod trait
可以解决这个问题。 - Donglei