以下代码无法编译:
编辑代码,调用对
也无法编译,但出乎意料地给出了一个提示信息(对我而言)。
以下内容无法编译:
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`
编辑代码,调用对
a
的引用上的append
函数: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
本身。然而,我相信我正在遵循一个包含类型A
的元素的Vec
的正确创建方式。根据Rust书籍:
To create a new, empty vector, we can call the
Vec::new
function, as shown in Listing 8-1.
let v: Vec<i32> = Vec::new();
(https://doc.rust-lang.org/book/ch08-01-vectors.html)
我已经成功地使用了Vec<String>
,使用与我正在尝试的相同的模式,但显然我对某些非常基本的东西存在误解。
append
对于Vec
有着不同的含义。 - Andrey Tyukinappend
(类似于 Python 的extend
)。但由于我对 Rust 还很陌生,编译器的信息把我引入了错误的方向,所以我决定发帖问问题。如果 Benjamin Lindley 写出答案,我会非常乐意接受它。 - JawguyChooser