如何将一个随机数生成器存储在结构体中?

4

我正在尝试将一个随机数生成器存储在一个结构体中。但似乎无法识别任何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,但不想使用特质对象。如何导入ThreadRng的定义?或者XorShiftRng(可能更快-我不需要加密强度)?类型是否在某个我不知道的子模块中?所有我在线上读到的示例都调用方法获取Rng并在本地使用它;他们从未将其存储在结构体中,也从未定义使用结构体名称的变量。


1
根据文档,类型实际上是 rand::rngs::ThreadRng。你试过了吗? - mcarton
不,我错过了那个小注释。阅读源代码并没有给我任何提示。 - Paul Chernoch
成功了!我试了一个小时各种方法...谢谢! - Paul Chernoch
1个回答

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接