gpt4 book ai didi

rust - 如何使用特征实现迭代器

转载 作者:行者123 更新时间:2023-12-05 01:52:54 27 4
gpt4 key购买 nike

我有一个名为 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()
}

关于rust - 如何使用特征实现迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71317728/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com