我是 Rust 新手,就像昨天刚开始的一样,我正在创建一个待办事项/日历应用程序来学习。我正处于通过结构和实现进行定义的最初阶段。我一直致力于创建一个过滤向量的函数。但我在使用
filter()
和 collect()
时遇到错误。老实说,我不确定需要做什么,我确实继续了解有关序列化的更多信息,但无法走得太远。我希望得到一些建议或解释,因为我不明白问题是什么。
错误是
error[E0277]: a value of type `TodoList<'_>` cannot be built from an iterator over elements of type `structs::Todoitem::Todoitem<'_>`
--> src/structs/Todolist.rs:92:26
|
92 | .into_iter().collect()
| ^^^^^^^ value of type `TodoList<'_>` cannot be built from `std::iter::Iterator<Item=structs::Todoitem::Todoitem<'_>>`
我的实现和结构如下。
pub struct TodoList<'a> {
pub items: Vec<Todoitem<'a>>,
}
... //my implementation for filter is..
fn helperFilterStatus(&mut self, target: Types::Status) -> TodoList<'a> {
self.items
.into_iter().filter(|x_item| x_item.status==target).collect()
}
最后
todoitem
pub struct Todoitem<'a> {
pub id: u32,
pub title: &'a str,
...
}
我还没有添加完整的实现,但如果需要的话我可以分享 git 链接。
reddit 上的评论有帮助:https://www.reddit.com/r/rust/comments/1bn27hy/implementing_filter_for_vector_of_custom_struct/
impl<'a> FromIterator<Todoitem<'a>> for TodoList<'a> {
fn from_iter<T: IntoIterator<Item = Todoitem<'a>> > (iter: T) -> Self {
let mut c = TodoList { items: Vec::new() };
for i in iter {
c.add_item(i)
}
c
}
}
fn helperFilterStatus(&mut self, target: Types::Status) ->TodoList<'a>{
self.items
.drain(..).filter(|x_item| x_item.status==target).collect()
}