[英]How to implement iterator using trait
我有一個名為 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()
}
}
對於第二種情況,您可以使用 IntoIterator 特性提供的IntoIterator
into_iter()
將向量轉換為迭代器:
fn foo(x: Vec<u32>) -> impl Iterator<Item=u32> {
x.into_iter()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.