以下内容无法编译:
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
进行正确的创建。从Rust书中:
要创建一个新的空向量,我们可以调用
Vec::new
函数,如下所示: 如清单8-1所示。let v: Vec<i32> = Vec::new();
(https://doc.rust-lang.org/book/ch08-01-vectors.html)
我已经成功使用Vec<String>
并使用了与此处相同的模式,但是我显然误解了一些非常基本的东西。
答案 0 :(得分:1)
我认为可能有人在评论中说了这一点,但通过将另一矢量的所有元素添加到“自我”中,将其追加到此矢量中,我认为您正在尝试push(a)
到您的vec
答案 1 :(得分:0)
如果你和我一样,你实际上想做相反的事情(即阻止 VSCode 自动切换到“调试控制台”选项卡,而不是仅仅停留在“终端选项卡”上),那么我发现解决方案是将此设置添加到您的 launch.json
文件中:
"avoidWindowsConsoleRedirection": true