Как вставить значение в 2D Vec в 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]: cannot borrow `*v` as mutable, as it is behind a `&` reference
--> src/main.rs:4:9
|
3 | if let Some(v) = vec_2d.last() {
| - help: consider changing this to be a mutable reference: `&mut std::vec::Vec<i32>`
4 | v.push(1);
| ^ `v` is a `&` reference, so the data it refers to cannot be borrowed as mutable
Я также пыталсяSome(ref v)
а такжеSome(ref mut v)
с такими же результатами. Я не могу найти документацию, которая описывает эту ошибку конкретно. Какой правильный подход здесь?
ответ на аналогичный вопрос рекомендует что-то более похожееSome(&mut v)
, Тогда я получаю эти ошибки:
error[E0308]: mismatched types
--> src/main.rs:3:17
|
3 | if let Some(&mut v) = vec_2d.last() {
| ^^^^^^ types differ in mutability
|
= note: expected type `&std::vec::Vec<_>`
found type `&mut _`
= help: did you mean `mut v: &&std::vec::Vec<_>`?
Если я попробуюSome(&ref mut v)
Я получил:
error[E0596]: cannot borrow data in a `&` reference as mutable
--> src/main.rs:3:18
|
3 | if let Some(&ref mut v) = vec_2d.last() {
| ^^^^^^^^^ cannot borrow as mutable