如果“ChunksMut”永远不是“Clone”,为什么还要存在“cycle()”方法?

Mar*_*ena 3 rust

https://doc.rust-lang.org/std/slice/struct.ChunksMut.html有循环方法: https : //doc.rust-lang.org/std/iter/struct.Cycle.html#method .cycle仅在以下情况下有效Self: Clone

但是,ChunksMut没有实现Clone,因此我不能这样做:

fn main() {
    let a = &[1,2,3,4,5,6];
    let mut chunks = a.chunks_mut(2);
    let cycle = chunks.cycle();
    for c in cycle {
        
    }
}
Run Code Online (Sandbox Code Playgroud)

cycle()如果ChunksMut从不存在,为什么该方法存在Clone?

Abd*_*P M 6

ChunksMut 实现Iterator特质.

impl<'a, T> Iterator for ChunksMut<'a, T>
Run Code Online (Sandbox Code Playgroud)

来自Traitcycle()默认实现Iteratorcycle有一个 predicate( where Self: Clone) 限制对不可克隆的cycle类型的调用。

fn cycle(self) -> Cycle<Self>
where
    Self: Clone, 
Run Code Online (Sandbox Code Playgroud)

  • 它提出了一个有趣的问题:rustdoc 是否应该隐藏从谓词永远无法满足的特征继承的函数?不过,我不确定当前的 rustdoc 基础设施是否可行。 (2认同)