我试图迭代一个字符串向量的子部分,即一个子部分Vec<String>.在每次迭代中,我想将字符串作为切片传递给函数.
我没有注意到Vec::get返回一个Option,并认为我可以直接迭代返回值:
fn take_str(s: &str) {
println!("{}", s);
}
fn main() {
let str_vec: Vec<String> =
["one", "two", "three", "uno", "dos", "tres"].iter().map(|&s|
s.into()).collect();
for s in str_vec.get(0..3) {
take_str(&s); // Type mismatch: found type `&&[std::string::String]`
}
}
Run Code Online (Sandbox Code Playgroud)
显然,我期待s成为一个String,但事实上&[String].这是因为我的for循环实际上是迭代Option返回的Vec::get().
我还编写了以下代码,它演示了for循环实际上解开了Option:
let foo = Option::Some ( ["foo".to_string()] );
for f in foo {
take_str(&f); // Same error as above, showing `f` is …Run Code Online (Sandbox Code Playgroud)