我刚刚在 Rust 中遇到了以下代码:
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
fn main() {
let mut v1 = vec![HashMap::<i32, i32>::new(); 2];
v1[0].insert(0,0);
v1[1].insert(1,1);
println!("{:?}", v1);
let v2 = vec![Arc::new(Mutex::new(HashMap::<i32, i32>::new())); 2];
v2[0].lock().unwrap().insert(0,0);
v2[1].lock().unwrap().insert(1,1);
println!("{:?}", v2);
}
// outputs:
// [{0: 0}, {1: 1}]
// [Mutex { data: {0: 0, 1: 1} }, Mutex { data: {0: 0, 1: 1} }]
Run Code Online (Sandbox Code Playgroud)
它显然v1有 2 个不同的 HashMap,而v2只有一个。这是怎么回事?不应该v2评估Arc::new(Mutex::new(HashMap::<i32, i32>::new()))两次(就像v1do)从而创建两个不同的元素?这是某种“懒惰”的评估吗?
请原谅我的 rust 新手问题,提前致谢!