我正在进行我的第一个Rust项目,并在学习中前进。我正在尝试过滤一个&str向量,但是当我尝试收集迭代器时,会出现以下错误:
a value of type `std::vec::Vec<&str>` cannot be built from an iterator over elements of type `&&str`
`filter`的文档提到了当你得到一个双重引用时的情况。遵循文档中的建议,我尝试在闭包参数中对引用进行解构,并尝试在闭包体中添加单重或双重取值。let test = vec!("a", "b", "", "c");
let filt_a: Vec<&str> = tst.iter().filter(|&&x| x.is_empty()).collect();
let filt_b: Vec<&str> = tst.iter().filter(|&x| *x.is_empty()).collect();
let filt_c: Vec<&str> = tst.iter().filter(|x| **x.is_empty()).collect();
任何减少的解引用(或结构化引用)都会导致完全相同的错误。
添加任何额外的解引用只会在尝试解引用普通的
&str
时产生错误。任何帮助我找到正确方向的建议都将是极好的。
.copied()
,或者使用into_iter()
代替iter()
。后者会导致原始向量被使用后无法再次访问。 - Sven Marnachinto_iter()
时,我无法使用2个解引用。.copied
能够与任何解引用组合配合使用。 - Sam F.H.