我目前正在阅读rust关于use
的书中的chapter 7.4,但我不理解其中的片段:
use rand::Rng;
fn main() {
let secret_number = rand::thread_rng().gen_range(1..=100);
}
我不明白为什么使用use rand::Rng
(将结构体Rng
放入作用域),而是rand::thread_rng()
的用法。我猜thread_rng是一个Rng构建器,但这在我看来很奇怪,不明确。
我只希望使用use rand
,因为thread_rng
在rand
命名空间中,而且我不明白它是如何工作的,因为rand
本身不在作用域中
2条答案
按热度按时间0ve6wy6x1#
use rand;
将是无用的,因为rand
已经在范围内。但是,
rand::Rng
is a trait。它的一个方法是gen_range()
。只有当trait在作用域中时,才能调用trait方法。如果删除此use
,则会出现错误:t5zmwmid2#
当你给你的
Cargo.toml
添加一个依赖项,比如rand = *
,它会自动进入你的crate的全局作用域,这就是为什么你可以把它当作rand::thread_rng()
来使用。不过,这只适用于rust
2018
,在此之前,您需要一个extern crate rand;
语句,它会将兰德带入作用域,而现在,它刚刚进入全局作用域。