rust 如何装饰一个向量并添加迭代器的自定义实现?

7vhp5slm  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(121)

我正在尝试为vector创建一个自定义迭代器:

struct FriendsOnly {
  all: Vec<Person>
}
impl FriendsOnly {
  pub fn iter(&self) -> Iter<Person> {
    // return an iterator of all Person where p.is_friend() returns true
  }
}

Rust中的规范方法是什么?

rryofs0p

rryofs0p1#

下面是一个示例,说明您可以执行的操作。使用impl Iterator以更灵活的方式指定返回类型。

use std::slice::Iter;
struct Person {
    pub name: String,
}

impl Person {
     pub fn is_friend(&self) -> bool {
        true
    }
}

struct FriendsOnly {
    all: Vec<Person>,
}

impl FriendsOnly {
    pub fn iter(&self) -> impl Iterator<Item= &Person> {
        self.all.iter().filter(|p| p.is_friend()).into_iter()
    }
}

相关问题