【发布时间】:2022-12-05 16:09:49
【问题描述】:
我正在尝试生锈扩展 VecDeque 类以在最大容量后删除元素。可能已经有一些东西可以做到这一点,但我很固执,对 rust 比较陌生,想知道正确的方法来做到这一点。但是,我在使用泛型实现 IntoIterator 时遇到了困难,并且遇到了一个我不明白的错误。
struct SlidingQueue<T> {
data: VecDeque<T>,
max_capacity: usize,
}
impl<T> SlidingQueue<T> {
//...
}
// just re-expose the VecDeque::IntoIter
impl<T> IntoIterator for SlidingQueue<T> {
type Item=T;
// type IntoIter=VecDeque<Self::Item>::IntoIter;
type IntoIter: = VecDeque<T>::IntoIter;
fn into_iter(self) -> Self::IntoIter {
self.data.into_iter()
}
}
这会产生:
error[E0223]: ambiguous associated type
--> src\sliding_queue.rs:32:22
|
32 | type IntoIter: = VecDeque<T>::IntoIter;
| ^^^^^^^^^^^^^^^^^^^^^ help: use fully-qualified syntax: `<VecDeque<T> as Trait>::IntoIter`
rustc --explain E0223 解释器似乎表明我在特征中引用了未定义的类型......但我认为那不是真的。我尝试执行编译器建议的操作也失败了(“特征”是什么特征?)。任何建议将不胜感激!
【问题讨论】:
-
试试
<VecDeque<T> as IntoIterator>::IntoIter -
解释看我回复this answer的评论