Rust 实现迭代器时出现锈蚀类型错误

Rust 实现迭代器时出现锈蚀类型错误,rust,traits,associated-types,Rust,Traits,Associated Types,我试图将.split从切片推广到迭代器,但我似乎无法获得正确的类型。这部分是因为我对锈菌没有太多的经验,部分是因为我从锈菌中看到的错误信息非常模糊。我已经包括了我认为相关的代码片段,但是还有一个traitSplittable及其实现。错误(我认为第二个错误是由第一个错误引起的,如果不正确,请告诉我): struct Split bool>{ 国际热核实验堆:我, pred:P, } 用于拆分的impl bool>迭代器{ 项目类型=Vec; fn下一步(&mut self)->选项{ 自聚焦it

我试图将
.split
从切片推广到迭代器,但我似乎无法获得正确的类型。这部分是因为我对锈菌没有太多的经验,部分是因为我从锈菌中看到的错误信息非常模糊。我已经包括了我认为相关的代码片段,但是还有一个trait
Splittable
及其实现。错误(我认为第二个错误是由第一个错误引起的,如果不正确,请告诉我):

struct Split bool>{
国际热核实验堆:我,
pred:P,
}
用于拆分的impl bool>迭代器{
项目类型=Vec;
fn下一步(&mut self)->选项{
自聚焦iter
.克隆()
.位置(|x |(self.pred)(&x))
.map(| i | self.iter.take(i))
}
}
错误[E0271]:类型不匹配解决`::Item==&_`
-->src/main.rs:13:14
|
13 |.克隆()
|^^^^应为关联类型,找到引用
|
=注意:应为关联类型“::项`
找到参考`&_`
=注意:考虑将关联类型'::item '约束为'&''或调用返回“::item”的方法
=注:有关更多信息,请访问https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
错误[E0599]:在当前作用域中找不到结构'std::iter::Cloned'的名为'position'的方法
-->src/main.rs:14:14
|
14 |位置(|x |(self.pred)(&x))
|在“std::iter::Cloned”中找不到方法`
|
=注意:方法'position'存在,但不满足以下特征界限:
`::项目=&_`
这是'std::iter::Cloned:std::iter::Iterator'所必需的`

您收到的特定错误消息是一条错误消息。它真正抱怨的是需要对引用使用迭代器,您可以从其定义中看到:

fn cloned<'a, T>(self) -> Cloned<Self>
where
    Self: Iterator<Item = &'a T>,
    T: 'a + Clone, 
代码中还有一些其他问题:

  • 您多次借用
    self
    ,以访问
    iter
    pred
  • 您正在有效地将
    self.iter
    移动到
    map
  • take
    使用您调用它的迭代器,因此即使您重构以避免上述两个问题,它仍然不会编译

如果您确实打算将实现限制为引用上的迭代器,则可以如下定义边界:

struct Split<I, P>
where
    I: Iterator + Clone,
    P: Fn(&I::Item) -> bool
struct Split<'a, I, T, P>
where
    I: Iterator<Item=&'a T>,
    T: 'a + Clone,
    P: Fn(&I::Item) -> bool
struct Split,
T:‘克隆人’,
P:Fn(&I::Item)->bool
然后您就可以使用
克隆