为自定义的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,应该有帮助