我正在尝试在Rust中编写一个简单的迭代器:
#[derive(Debug)]
pub struct StackVec<'a, T: 'a> {
storage: &'a mut [T],
len: usize,
_head: usize,
}
impl<'a, T> IntoIterator for StackVec<'a, T> {
type Item = T;
type IntoIter = core::slice::Iter<'a, T>;
fn into_iter(self) -> core::slice::Iter<'a, T> {
self.storage.iter()
}
}
然而,当尝试编译它时,我收到了这个错误:
error[E0271]: type mismatch resolving `<core::slice::Iter<'_, T> as core::iter::Iterator>::Item == T`
--> src/lib.rs:135:13
|
135 | impl<'a, T> IntoIterator for StackVec<'a, T> {
| ^^^^^^^^^^^^ expected reference, found type parameter
|
= note: expected type `&T`
found type `T`
error: aborting due to previous error
error: Could not compile `stack-vec`.
这个错误信息有几个地方让人感到困惑。首先,似乎Rust无法将
core::slice::Iter
解析为core::iter::Iterator
。但是,core::slice::Iter
确实是一个迭代器,对吧?为什么这些类型不匹配呢?其次,在期望
IntoIterator
是引用而不是类型参数时,我看到了一个错误。然而它一开始就不是一个类型参数。这是怎么回事?我在这里做错了什么?Rust试图告诉我有关我的代码的什么?