我有两个结构:
struct A {
map: HashMap<u32, Vec<B>>,
}
struct B {
weak: Weak<A>
}
Run Code Online (Sandbox Code Playgroud)
当A构建,它将自己的几个B,每个链接回A其刚刚建立,与此类似:
let a = Arc::new(A { map: HashMap::new() });
let b1 = B { weak: Arc::downgrade(&a) };
let b3 = B { weak: Arc::downgrade(&a) };
let b2 = B { weak: Arc::downgrade(&a) };
a.map.insert(5, vec![b1, b2]);
a.map.insert(10, vec![b3]);
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为Arc没有提供修改地图的方法.Arc::get_mut因为a Weak已经构造为值,所以不起作用.
它是如何能够构建一个A与一些B?我正在尝试在访问时避免运行时检查,map因为在构造之后它将永远不会再被修改.我使用不安全的代码或批准的夜间功能没有问题.