【发布时间】:2015-01-13 05:15:36
【问题描述】:
情况:
我有一种情况,我想在函数参数上调用Iterator trait 上定义的一些方法。我想调用它的函数采用类型为trait 的参数,称为VecLike。该函数名为get_all_matching_rules。
get_all_matching_rules 可以接收Vec 或另一个类似的自制 类型,它也实现了Iterator。当然,这两个都实现了VecLike。我正在考虑在VecLike 上添加一个函数,让它返回一个Iterator,这样我就可以在get_all_matching_rules 中使用它。
如果我的参数命名为:matching_rules,那么我可以使用matching_rules.iter().filter(。
问题:
如何从 Vec 返回非消耗迭代器?
我希望能够在Iterator<T> 类型的Vec<T> 上返回一个非消耗迭代器。我不想通过调用 .iter() 来迭代这些项目。
如果我有(其中 self 是 Vec):
fn iter<'a>(&'a self) -> Iterator<T> {
self.iter()
}
我收到以下错误:
error: mismatched types: expected `core::iter::Iterator<T>+'a`, found `core::slice::Items<'_,T>` (expected trait core::iter::Iterator, found struct core::slice::Items)
我想退回Iterator<t>。如果有更好的方法而不是返回Iterator,我会全力以赴。
【问题讨论】:
-
我已经编辑了我的问题,因为我之前并不清楚。对不起,这完全是我的错。如果我可以进一步改进,请告诉我。
-
(在移动设备上,无法更新答案)迭代器是一个特征,你不能返回它。您可以返回 Box
> 或 U where U:Iterator . -
(另外,还不清楚退货有什么问题。
标签: rust