У меня есть следующее:
fn main() {
let foo = vec![];
let mut bar = vec![1, 2].iter().map(|a| a + 1).collect::<Vec<_>>();
foo.append(&bar);
}
Когда я запускаю фрагмент кода, Rust жалуется на bar
не изменяемость:
error[E0308]: mismatched types
--> src/main.rs:4:16
|
4 | foo.append(&bar);
| ^^^^ types differ in mutability
|
= note: expected mutable reference `&mut std::vec::Vec<_>`
found reference `&std::vec::Vec<_>`
Как я понимаю, мне нужно иметь изменяемую ссылку на Vec
, который я пытаюсь добавить, так как сигнатура типа для Vec::append
равна:
fn append(&mut self, other: &mut Vec<T>)
Однако это Мне кажется, что bar
должно быть изменяемым согласно предоставленному ключевому слову.
Можно ли добавить после вызова collect
? Что здесь происходит?