Dar*_*eth 4 iterator traits rust
我有一个名为 Library 的结构,它有一个字符串向量(标题)。我为此实现了一个迭代器。这是我的代码。
#[derive(Debug, Clone)]
struct Library {
books: Vec<String>
}
impl Iterator for Library {
fn next(&mut self) -> Option<Self::Item> {
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我尝试使用特征来实现迭代器,如下所示:
fn foo(x: Vec<u32>) -> impl Iterator<Item=u32> {
//Unsure if correct method
fn next() -> Option<...> {
x.into_iter()....
}
}
Run Code Online (Sandbox Code Playgroud)
但我不确定在这种情况下如何进行。我是否只需再次定义 next() 方法?根据其他资源,情况似乎并非如此。这是为什么?迭代器(正在返回)不应该有 next() 方法吗?
以这种方式实现迭代器的一般方法是什么?
您不会直接在 上实现该特征Library。该库不是迭代器,但它是可以由迭代器迭代的东西。
相反,只需声明一个返回迭代器的方法,您就可以直接从向量返回迭代器。不需要自定义迭代器实现。例如:
impl Library {
fn iter(&self) -> impl Iterator<Item=&String> {
self.books.iter()
}
}
Run Code Online (Sandbox Code Playgroud)
into_iter()对于第二种情况,您可以使用特征提供的将向量转换为迭代器IntoIterator:
fn foo(x: Vec<u32>) -> impl Iterator<Item=u32> {
x.into_iter()
}
Run Code Online (Sandbox Code Playgroud)