Generics 检查where子句中是否存在相同的关联类型

Generics 检查where子句中是否存在相同的关联类型,generics,rust,Generics,Rust,考虑以下两个特点: trait Iterator { type Item; fn next(&mut self) -> Option<Self::Item>; } 它将实施 fn peek(&mut self) -> Option<&<I as Iterator>::Item>; 及 选项:从 然后在需要转换时调用Option::from。这似乎有点难看,我想知道这个问题是否可以更简洁地解决。从另一个特征

考虑以下两个特点:

trait Iterator {
   type Item;

   fn next(&mut self) -> Option<Self::Item>;
}
它将实施

fn peek(&mut self) -> Option<&<I as Iterator>::Item>;

选项:从

然后在需要转换时调用
Option::from
。这似乎有点难看,我想知道这个问题是否可以更简洁地解决。

从另一个特征约束中引用一个特征:

struct PeekableSeekable<I>
    where I: Iterator
{
    iter: I,
    peeked: Option<I::Item>,
}

impl<I> PeekableSeekable<I>
    where I: Iterator<Item = <I as SeekingIterator>::Item> + SeekingIterator
{
    // Implement
}
struct可查看可查看
其中I:迭代器
{
国际热核实验堆:我,
偷看:选项,
}
不可能的,不可能的
其中I:Iterator+seekingterator
{
//实施
}
< /代码>请考虑在将来创建一个。很难猜测
impl
块包含的内容。
fn peek(&mut self) -> Option<&<I as Iterator>::Item>;
fn peek_seek(&mut self, other: &<I as SeekingIterator>::Item) -> Option<&<I as SeekingIterator>::Item>   
Option<<I as Iterator>::Item>: From<Option<<I as SeekingIterator>::Item>>
Option<<I as SeekingIterator>::Item>: From<Option<<I as Iterator>::Item>>
struct PeekableSeekable<I>
    where I: Iterator
{
    iter: I,
    peeked: Option<I::Item>,
}

impl<I> PeekableSeekable<I>
    where I: Iterator<Item = <I as SeekingIterator>::Item> + SeekingIterator
{
    // Implement
}