我有一个函数,它采用 a &Vec<Word>(其中Word是本地定义的类型)并且应该返回 a Vec<Word>(或 a &Vec<Word>)。该函数的定义包括从参数中过滤值:
fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误消息:
fn possibleWords(w1: &Word, words: &Vec<Word>) -> Vec<Word> {
words.into_iter().filter(|w| matches(w, w1)).collect::<Vec<Word>>()
}
Run Code Online (Sandbox Code Playgroud)
我不想返回切片,我真的想要一个Vec. 有没有办法在不Vec从切片中手动构建 a 的情况下做到这一点?
这是一个 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));
}
Run Code Online (Sandbox Code Playgroud)
您正在 a 上调用该into_iter方法&Vec<Word>,它会给您一个Iterator<&Word>. 当您尝试从该迭代器中收集元素时,您将获得一个集合,&Word尽管您想要一个Word.
您有两个选择来解决这个问题:
Iterator<&Word>为 an Iterator<Word>(调用cloned迭代器上的方法);Vec<Word>给函数,而不是 a &Vec<Word>。这样,该into_iter方法将返回一个Iterator<Word>,您可以毫无问题地从中收集。| 归档时间: |
|
| 查看次数: |
3800 次 |
| 最近记录: |