为什么这不编译:
fn main() {
let mut b = Box::new(Vec::new());
b.push(Vec::new());
b.get_mut(0).unwrap().push(1);
}虽然这样做:
fn main() {
let a = Box::new(Vec::new());
let mut b = *a;
b.push(Vec::new());
b.get_mut(0).unwrap().push(1);
}这也确实是:
fn main() {
let mut b = Vec::new();
b.push(Vec::new());
b.get_mut(0).unwrap().push(Vec::new());
b.get_mut(0).unwrap().get_mut(0).unwrap().push(1)
}对我来说,第一个和第三个在概念上是相同的--一个整数的Box,一个整数的Vec子,一个Vec的Vec的,一个整数的,但是最后一个,导致每个向量是可变的,而第一个,使得内部向量是不可变的。
发布于 2018-05-08 21:25:36
至少在Rust 1.25.0中,所有三个原始示例都能工作。这是以前版本的Rust中的一个bug。
发布于 2015-02-07 19:34:57
在以可变的形式访问值之前,需要将其解压缩:
fn main() {
let mut b = Box::new(Vec::new());
b.push(Vec::new());
(*b).get_mut(0).unwrap().push(1);
}这是因为.操作符使用Deref特征而不是DerefMut。
实现这一目标的最佳途径是:
fn main() {
let mut b = Box::new(Vec::new());
b.push(Vec::new());
b[0].push(1);
}https://stackoverflow.com/questions/28386120
复制相似问题