Как мне сохранить генератор случайных чисел в структуре? - PullRequest
0 голосов
/ 21 сентября 2019

Я пытаюсь сохранить генератор случайных чисел в структуре.Я не могу получить определение структуры для любых структур 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 Ответ

1 голос
/ 21 сентября 2019

Если вы посмотрите документацию rand::thread_rng, вы можете щелкнуть по типу возврата, чтобы увидеть, что его полное имя действительно rand::rngs::ThreadRng.

...