我尝试在另一个向量内使用String
向量:
let example: Vec<Vec<String>> = Vec::new();
for _number in 1..10 {
let mut temp: Vec<String> = Vec::new();
example.push(temp);
}
我的向量中应该有10个空的String
向量,但是:
example.get(0).push(String::from("test"));
失败
error[E0599]: no method named `push` found for type `std::option::Option<&std::vec::Vec<std::string::String>>` in the current scope
--> src/main.rs:9:20
|
9 | example.get(0).push(String::from("test"));
| ^^^^
为什么会失败?甚至有可能有一个向量“起始”?
答案 0 :(得分:2)
我强烈建议您在使用类型和方法之前阅读它们的文档。至少,请看一下函数的签名。对于slice::get
:
pub fn get<I>(&self, index: I) -> Option<&<I as SliceIndex<[T]>>::Output>
where
I: SliceIndex<[T]>,
虽然这里发生了一些泛型,但重要的是返回类型为Option
。 Option<Vec>
不是Vec
。
请参考The Rust Programming Language's chapter on enums以获得有关枚举的更多信息,包括Option
和Result
。如果您希望继续使用get
的语义,则需要:
get_mut
。example
可变。if let
。let mut example: Vec<_> = std::iter::repeat_with(Vec::new).take(10).collect();
if let Some(v) = example.get_mut(0) {
v.push(String::from("test"));
}
如果要在索引中不存在该值的情况下终止程序,最短的事情是使用索引语法[]
:
example[0].push(String::from("test"));