有一个trait如下:
pub trait MatrixIterator<T : Iterator> {
fn get_iterator(self : &Self, row : &i64) -> T;
}
我要为类型SparseMatrix实现该trait:
impl<T> MatrixIterator<RowIterator<'a, T>> for SparseMatrix<T> {
fn get_iterator(self : &Self, row : &i64) -> RowIterator<'a, T> {
RowIterator::new(*row, &self.container[*row as usize].1)
}
}
其中RowIterator已经实现了Iterator,其带有一个生命周期标记,但是我的SparseMatrix并不含有 生命周期标记,这个时候如何指定'a呢?
1
共 5 条评论, 1 页
评论区
写评论非常感谢,rust的这种设计,生命周期标记和trait绑定的这么紧密,是不是会限制语言的抽象能力呀,如果我要为RowIterator实现标准库的Iterator岂不是做不到·。·
--
👇
nujz: 改 SparseMatrix 好像不行
改 SparseMatrix 好像不行
你好,我刚学rust不久,只见过在拥有引用类型成员的struct上如何标注生命周期,我的SparseMatrix不含有引用类型,该怎么标记呢。或者这里的MatrixIterator怎么修改,感谢。
--
👇
nujz: ```rust fn get_iterator(self : &Self, row : &i64) -> RowIterator<'a, T>
编译器没法判断返回值 RowIterator<'a, T> 的生命周期跟 self 或 row 的关系,得在 MatrixIterator 或 SparseMatrix 上面加 'a 才行