为自定义的VectorIter实现Iterator的trait,下面的代码是正确的么,如果是正确的,Iterator中的'a到底约束了什么,如果不是正确的那应该怎么写? 我尝试为self加上'a生命周期约束,但是rust提示我:
expected fn pointer `fn(&mut VectorIter<'a, T>) -> Option<_>`
found fn pointer `fn(&'a mut VectorIter<'a, T>) -> Option<_>`rustcE0308
看样子是否标记生命周期对于实现trait方法而言是不一样的函数。
pub struct VectorIter<'a, T> {
index : i64,
holder : &'a Vector<T>,
}
impl<'a, T> Iterator for VectorIter<'a, T> {
type Item = &'a T;
fn next(self : &mut Self) -> Option<Self::Item> {
if self.index as usize == self.holder.container.len() {
None
} else {
let v = &self.holder.container[self.index as usize];
self.index += 1;
Some(v)
}
}
}
1
共 6 条评论, 1 页
评论区
写评论基本上明白了,感谢🤝
--
👇
ywxt: 并不是
等价于
这儿
'a:'b。你可以尝试以下代码,帮助理解。
查看解释
并不是
等价于
这儿
'a:'b。你可以尝试以下代码,帮助理解。
查看解释
那么这里的self是不是隐式的被标记了‘a,而且由于trait的限制不能显式加上
--
👇
ywxt:
VectorIter在'a内有效。impl<'a, T>这儿的'a、T和VectorIter的'a 、T是相同的.type Item = &'a T意为Item满足'a,并且T也满足.'a约束了每次next返回一个元素的时候,VectorIter应该是有效的(holder当然也是).多谢,我去看看
--
👇
munpf: 虽然我也算是新手,解释不清楚,不过你可以参考一下这篇文章:https://zhuanlan.zhihu.com/p/165976086,应该有帮助
VectorIter在'a内有效。impl<'a, T>这儿的'a、T和VectorIter的'a 、T是相同的.type Item = &'a T意为Item满足'a,并且T也满足.'a约束了每次next返回一个元素的时候,VectorIter应该是有效的(holder当然也是).虽然我也算是新手,解释不清楚,不过你可以参考一下这篇文章:https://zhuanlan.zhihu.com/p/165976086,应该有帮助