我有一个函数,它接受一个 &Vec<Word>
(其中Word
是本地定义的类型),并应该返回一个Vec<Word>
(或者&Vec<Word>
)。该函数的定义包括从参数中筛选值:
fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}
然而,我收到了以下错误信息:
error[E0277]: the trait bound `std::vec::Vec<[char; 10]>: std::iter::FromIterator<&[char; 10]>` is not satisfied
words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
^^^^^^^ a collection of type `std::vec::Vec<[char; 10]>` cannot be built from an iterator over elements of type `&[char; 10]`
我不想返回一个切片,而是想要一个
Vec
。有没有一种方法可以在不手动从切片构建一个 Vec
的情况下实现这一点?以下是 MCVE:
type Word = [char; 10];
fn matches(w1: &Word, w2: &Word) -> bool {
true
}
fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}
fn main() {
let w1 = ['D', 'E', 'C', 'O', 'U', 'V', 'E', 'R', 'T', 'E'];
let w2 = ['D', 'E', 'C', 'O', 'U', 'V', 'E', 'R', 'E', 'Z'];
let words = vec![w1, w2];
println!("{:?}", possibleWords(&w1, &words));
}
&Word
的迭代器中构建一个Vec<Word>
。尝试在collect
方法之前插入.cloned()
。 - Milack27into_iter
方法,你必须将向量本身传递给函数,而不是它的引用。 - Milack27possibleWords
应该使用&[Word]
而不是&Vec<Word>
。请参见 https://dev59.com/W1kS5IYBdhLWcg3wV1Zy。 - trent