【发布时间】:2018-02-21 16:16:22
【问题描述】:
我正在尝试用 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 试图告诉我什么?
【问题讨论】:
标签: rust