如果我以这种方式生成10个随机数,它会起作用(它会产生不同的值)
fn main() {
let seed = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.expect("system time cannot be before unix epoch")
.as_millis() as u64;
let mut rng = oorandom::Rand32::new(seed);
for _ in 0..10 {
println!("Your random number is: {}", &rng.rand_range(0..4));
}
但是,如果我将它们分解到一个 struct 中,生成的值总是相同的:
use oorandom::{self, Rand32};
struct Util {
rng: Rand32,
}
impl Util {
pub fn new() -> Self {
let seed = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_millis() as u64;
println!("new color util {}", seed);
let rng = Rand32::new(seed);
Util { rng }
}
pub fn get_random(&self) -> u32 {
let mut rng = self.rng;
let random_number = rng.rand_range(0..4);
random_number
}
}
fn main() {
let util = Util::new();
for _ in 0..10 {
println!("Your random number is: {}", util.get_random());
}
}
这两种使用get_random
API的方式有什么不同,为什么当我将rng
放在 struct 中时它会中断?