samedi 21 septembre 2019

How do I store a Random number generator in a struct?

I am trying to store a Random number generator in a struct. I can't seem to get the struct definition for any Rng structs to be recognized, like ThreadRng. This works:

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);
}

However, if I try to define a variable to have the actual type of the Rng, I get an error:

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);
}

The error is:

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`

I want to store the Rng in a struct, and I do not want a trait object. How do I import the definition of ThreadRng? Or XorShiftRng (which might be faster - I do not need cryptographic strength)? Is the type in some sub-module I don't know about? All the examples I read online call a method to get the Rng and use it locally; they never store it in a struct and never define any variables that use the struct name.




Aucun commentaire:

Enregistrer un commentaire