Следующее не компилируется:
struct A {
f: u16,
}
fn main() {
let v: Vec<A> = Vec::new();
let a = A { f: 42 };
v.append(a);
}
Но сообщение компилятора, похоже, ведет меня по неверному пути:
error[E0308]: mismatched types
--> src/main.rs:8:14
|
8 | v.append(a);
| ^ expected mutable reference, found struct `A`
|
= note: expected type `&mut std::vec::Vec<A>`
found type `A`
Редактирование кода для вызова append
по ссылке на a
:
v.append(&mut a);
Также не компилируется, но с неожиданным (для меня) сообщением:
error[E0308]: mismatched types
--> src/main.rs:8:18
|
8 | v.append(&mut a);
| ^^^^^^ expected struct `std::vec::Vec`, found struct `A`
|
= note: expected type `&mut std::vec::Vec<A>`
found type `&mut A`
Разве append
не должен искать элемент Vec
? Кажется, он ищет Vec
сам. Тем не менее, я полагаю, что я следую за правильным созданием для Vec
элементов типа A
. Из книги Руст:
Чтобы создать новый пустой вектор, мы можем вызвать функцию Vec::new
, так как
показано в Перечислении 8-1.
let v: Vec<i32> = Vec::new();
(https://doc.rust -lang.org / книга / ch08-01-vectors.html )
Я успешно использовал Vec<String>
, используя ту же схему, что и здесь, но я явно неправильно понимаю что-то совершенно фундаментальное.