簡體   English   中英

如何使用特征實現迭代器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM