Vector 如何将值推入Rust中的2D Vec?

Vector 如何将值推入Rust中的2D Vec?,vector,types,rust,Vector,Types,Rust,下面是2DVec的一个非常简单的尝试。我正在尝试向顶级Vec中的最后一个条目添加元素: fn main() { let mut vec_2d = vec![vec![]]; if let Some(v) = vec_2d.last() { v.push(1); } println!("{:?}", vec_2d); } 我得到这个错误: error[E0596]:不能将“*v”借用为可变的,因为它位于“&”引用后面 -->src/main.rs:

下面是2D
Vec
的一个非常简单的尝试。我正在尝试向顶级
Vec
中的最后一个条目添加元素:

fn main() {
    let mut vec_2d = vec![vec![]];
    if let Some(v) = vec_2d.last() {
        v.push(1);
    }
    println!("{:?}", vec_2d);
}
我得到这个错误:

error[E0596]:不能将“*v”借用为可变的,因为它位于“&”引用后面
-->src/main.rs:4:9
|
3 |如果让一些(v)=向量2d.last(){
-帮助:考虑改变这是一个可变的参考:'MUT STD::VEC::VEC
4 | v.推(1);
|^`v`是`&`引用,因此它引用的数据不能作为可变数据借用
我也尝试了
Some(ref v)
Some(ref mut v)
,得到了相同的结果。我找不到任何专门描述此错误的文档。这里的正确方法是什么

An推荐了一些更像
Some(&mut v)
的东西。然后我得到以下错误:

错误[E0308]:类型不匹配
-->src/main.rs:3:17
|
3 |如果让一些(&mut v)=向量2d.last(){
|^^^^^^^类型的可变性不同
|
=注意:应为类型`&std::vec::vec`
找到类型`&mut_`
=帮助:你是说'mut v:&&std::vec::vec`?
如果我尝试
Some(&ref mut v)
我会得到:

error[E0596]:无法将`&`引用中的数据作为可变数据借用
-->src/main.rs:3:18
|
3 |如果让一些(&ref mut v)=向量2d.last(){
|^^^^^^^^^^^^^^不能以可变形式借用

获取最后一个元素的可变引用;无需更改模式

fn main() {
    let mut vec_2d = vec![vec![]];
    if let Some(v) = vec_2d.last_mut() {
        v.push(1);
    }
    println!("{:?}", vec_2d);
}
fn main(){
让mut-vec_2d=vec![vec![];
如果让一些(v)=向量2d.last_mut(){
v、 推(1);
}
println!(“{:?}”,vec_2d);
}
对于这种特殊情况,更优雅的解决方案是:

fn main() {
    let vec_2d = vec![vec![1i32]];

    println!("{:?}", vec_2d);
}

有些方法可以返回可变或不可变引用。那些通常可以在可变版本前加上前缀
mut
,如
.last
.mut\u last