如何解决何时/为什么需要使用锈特质d /导入
何时/为什么需要{/ {1}}导入/导入Rust特征,或者为什么这个问题没有意义?
我是一位经验丰富的程序员,但是我是Rust的新手。
我正在按照The Rust Programming Language的方式工作–在chapter 2中,有以下陈述。
首先,我们添加一个
use
行:use
。use rand::Rng
特征定义了随机数生成器实现的方法,此特征必须在我们使用这些方法的范围之内。第10章将详细介绍特征。
强调我的。
我不清楚为什么要使用这个程序
Rng
需要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
不同?
解决方法
rand
“符号”是外部条板箱的名称,它位于根名称空间中,与任何use
语句无关。它定义了一个函数thread_rng()
,无论您的rand::
语句如何,该函数都可用(通过使用use
进行命名空间限定)。
因此,即使没有use语句,也可以执行以下操作:
let thread_rng = rand::thread_rng();
但是,thread_rng
返回一个rand::rngs::ThreadRng
结构,您试图在该结构上调用gen_range
,而 this 函数就是一种特征方法,在使用rand::Rng
语句引入use
特质之前,这是不适用的。
即使没有use
语句,实际上也可以调用特征方法:
rand::Rng::gen_range(&mut rand::thread_rng(),1,101);
...但是,总的来说,use
更干净。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。