【问题标题】:How do I store a Random number generator in a struct?如何将随机数生成器存储在结构中?
【发布时间】: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。你试过吗?
  • 没有。我错过了那个小纸条。阅读源代码没有给我任何线索。
  • 有效!将其发布为答案,我会接受。花了一个小时尝试各种事情...谢谢!

标签: random rust


【解决方案1】:

如果您查看文档rand::thread_rng,您可以单击它的返回类型来查看它的完全限定名称实际上是rand::rngs::ThreadRng。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2015-02-26
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多