代码之家  ›  专栏  ›  技术社区  ›  tcerqueira

如何引用不使用生存期参数的结构的生存期

  •  0
  • tcerqueira  · 技术社区  · 2 年前

    我正在尝试为2D板实现一个迭代器。这 Board 属于类型 [[Option<u8>; SIZE]; SIZE] 我创建了一个迭代器,用于遍历给定长度的正方形。

    struct SquareIterator<'a> {
        board: &'a Board,
        sqr_size: usize,
        row: usize,
        col: usize,
        row_iter: usize,
        col_iter: usize,
    }
    

    为了方便起见,我想我可以实现 IntoIterator 在…上 穿过整个木板 SquareIterator 属于 sqr_size = SIZE row=col=0

    所以第一次尝试:

    impl<'a> IntoIterator for Board<'a> {
        type IntoIter = SquareIterator<'a>;
        type Item = <SquareIterator<'a> as Iterator>::Item;
        fn into_iter(self) -> Self::IntoIter { /*(...)*/ }
    }
    

    毫不奇怪,它没有编译: error[E0107]: struct takes 0 lifetime arguments but 1 lifetime argument was supplied 董事会确实不需要终身争论。

    但不知怎么的,我想把 方形迭代器 无论一生 有我不知道如何做到这一点。

    1 回复  |  直到 2 年前
        1
  •  2
  •   cafce25    2 年前

    您正在实施 IntoIterator 做错事! 自从你 SquareIterator 采取 &Board 您应该实现:

    impl<'a> IntoIterator for &'a Board {
        type IntoIter = SquareIterator<'a>;
        type Item = <SquareIterator<'a> as Iterator>::Item;
        fn into_iter(self) -> Self::IntoIter { /*(...)*/ }
    }
    

    通常你会加一个 iter 或与固有 impl 的块 Board 以及:

    impl Board {
        fn iter(&self) -> SquareIterator<'_> {
            self.into_iter()
        }
    }
    
    推荐文章