• M
    Rollup merge of #62737 - timvermeulen:cycle_try_fold, r=scottmcm · 477db050
    Mazdak Farrokhzad 提交于
    Override Cycle::try_fold
    
    It's not very pretty, but I believe this is the simplest way to correctly implement `Cycle::try_fold`. The following may seem correct:
    ```rust
    loop {
        acc = self.iter.try_fold(acc, &mut f)?;
        self.iter = self.orig.clone();
    }
    ```
    ...but this loops infinitely in case `self.orig` is empty, as opposed to returning `acc`. So we first have to fully iterate `self.orig` to check whether it is empty or not, and before _that_, we have to iterate the remaining elements of `self.iter`.
    
    This should always call `self.orig.clone()` the same amount of times as repeated `next()` calls would.
    
    r? @scottmcm
    477db050
iter.rs 79.3 KB