【发布时间】:2019-09-22 04:44:38
【问题描述】:
我正在尝试将随机数生成器存储在结构中。我似乎无法获得要识别的任何 Rng 结构的结构定义,例如 ThreadRng。这有效:
use rand::{
self,
distributions::{Distribution, Uniform},
}; // 0.6.4
fn main() {
let mut rng = rand::thread_rng();
let die_range = Uniform::new_inclusive(1, 6);
let die = die_range.sample(&mut rng);
println!("{}", die);
}
但是,如果我尝试将变量定义为具有 Rng 的实际类型,则会出现错误:
use rand::{
self,
ThreadRng,
distributions::{Distribution, Uniform},
}; // 0.6.4
fn main() {
let mut rng :ThreadRng = rand::thread_rng();
let die_range = Uniform::new_inclusive(1, 6);
let die = die_range.sample(&mut rng);
println!("{}", die);
}
错误是:
error[E0432]: unresolved import `rand::ThreadRng`
--> src/main.rs:3:5
|
3 | ThreadRng,
| ^^^^^^^^^
| |
| no `ThreadRng` in the root
| help: a similar name exists in the module: `thread_rng`
我想将 Rng 存储在一个结构中,我不想要一个 trait 对象。如何导入 ThreadRng 的定义?还是 XorShiftRng(可能更快——我不需要加密强度)?是我不知道的某些子模块中的类型吗?我在网上阅读的所有示例都调用了一个方法来获取 Rng 并在本地使用它;他们从不将其存储在结构中,也从不定义任何使用结构名称的变量。
【问题讨论】:
-
根据文档,类型实际上是
rand::rngs::ThreadRng。你试过吗? -
没有。我错过了那个小纸条。阅读源代码没有给我任何线索。
-
有效!将其发布为答案,我会接受。花了一个小时尝试各种事情...谢谢!