我以为我了解何时以及为什么需要mut在 Rust 代码中使用,但我不明白为什么需要mut在以下代码中使用。
use rand::{thread_rng, Rng};
fn main() {
let mut rng = thread_rng(); // Why does this need to be mutable?
println!("{:?}", rng); // outputs ThreadRng { rng: UnsafeCell }
let x: u32 = rng.gen();
println!("{}", x);
println!("{:?}", rng); // outputs the same result as ThreadRng { rng: UnsafeCell }
}
Run Code Online (Sandbox Code Playgroud)
让我解释。变量rng被声明为可变的,但它的值在整个代码中永远不会改变,那么为什么我需要使rng变量可变呢?
有两种情况需要将变量声明为可变:
let mut my_var = 5i32;
println!("old value {}", my_var);
my_var = my_var * 2;
println!("old value {}", my_var);
Run Code Online (Sandbox Code Playgroud)
let mut my_var = 5i32;
println!("old value {}", my_var);
let reference = &mut my_var;
*reference = 10; // Mutable reference allow us change the value
println!("old value {}", my_var);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中会非常令人惊讶,因为如果我们声明my_var 为let my_var 因为它的实际值发生了变化。
你的情况正是如此。你调用这个方法:https : //docs.rs/rand/0.8.3/rand/trait.Rng.html#method.gen 你的代码可以改写为:
let x: u32 = Rng::gen(&mut rng);
Run Code Online (Sandbox Code Playgroud)
如您所见,通过调用使用&mut self.