如何使用特征实现迭代器



我有一个名为Library的结构,它有一个字符串(标题)向量。我已经为此实现了一个迭代器。这是我的代码。

#[derive(Debug, Clone)]
struct Library {
books: Vec<String>
}
impl Iterator for Library {
fn next(&mut self) -> Option<Self::Item> {
...
}
}

现在,我正在尝试使用特征实现迭代器,如下所示:

fn foo(x: Vec<u32>) -> impl Iterator<Item=u32> {
//Unsure if correct method
fn next() -> Option<...> {
x.into_iter()....
}
}

但我不确定在这种情况下如何进行。我只需要再次定义一个 next() 方法吗?根据其他资源,情况似乎并非如此。为什么?迭代器(正在返回)不应该有一个 next() 方法吗?

以这种方式实现迭代器的通用方法是什么?

您不会直接在Library上实现该特征。库不是迭代器,但它可以由迭代器迭代

。相反,只需声明一个返回迭代器的方法,您就可以直接从向量返回迭代器。 不需要自定义迭代器实现。 例如:

impl Library {
fn iter(&self) -> impl Iterator<Item=&String> {
self.books.iter()
}
}

对于第二种情况,您可以使用into_iter()将向量转换为迭代器,由IntoIterator特征提供:

fn foo(x: Vec<u32>) -> impl Iterator<Item=u32> {
x.into_iter()
}

最新更新