@@ -1495,14 +1495,13 @@ impl<I: Iterator, P> Iterator for TakeWhile<I, P>
1495
1495
if self . flag {
1496
1496
None
1497
1497
} else {
1498
- self . iter . next ( ) . and_then ( |x| {
1499
- if ( self . predicate ) ( & x) {
1500
- Some ( x)
1501
- } else {
1502
- self . flag = true ;
1503
- None
1504
- }
1505
- } )
1498
+ let x = self . iter . next ( ) ?;
1499
+ if ( self . predicate ) ( & x) {
1500
+ Some ( x)
1501
+ } else {
1502
+ self . flag = true ;
1503
+ None
1504
+ }
1506
1505
}
1507
1506
}
1508
1507
@@ -1517,22 +1516,30 @@ impl<I: Iterator, P> Iterator for TakeWhile<I, P>
1517
1516
}
1518
1517
1519
1518
#[ inline]
1520
- fn try_fold < Acc , Fold , R > ( & mut self , init : Acc , mut fold : Fold ) -> R where
1519
+ fn try_fold < Acc , Fold , R > ( & mut self , init : Acc , fold : Fold ) -> R where
1521
1520
Self : Sized , Fold : FnMut ( Acc , Self :: Item ) -> R , R : Try < Ok =Acc >
1522
1521
{
1523
- if self . flag {
1524
- Try :: from_ok ( init )
1525
- } else {
1526
- let flag = & mut self . flag ;
1527
- let p = & mut self . predicate ;
1528
- self . iter . try_fold ( init , move |acc, x|{
1522
+ fn check < ' a , T , Acc , R : Try < Ok = Acc > > (
1523
+ flag : & ' a mut bool ,
1524
+ p : & ' a mut impl FnMut ( & T ) -> bool ,
1525
+ mut fold : impl FnMut ( Acc , T ) -> R + ' a ,
1526
+ ) -> impl FnMut ( Acc , T ) -> LoopState < Acc , R > + ' a {
1527
+ move |acc, x| {
1529
1528
if p ( & x) {
1530
1529
LoopState :: from_try ( fold ( acc, x) )
1531
1530
} else {
1532
1531
* flag = true ;
1533
1532
LoopState :: Break ( Try :: from_ok ( acc) )
1534
1533
}
1535
- } ) . into_try ( )
1534
+ }
1535
+ }
1536
+
1537
+ if self . flag {
1538
+ Try :: from_ok ( init)
1539
+ } else {
1540
+ let flag = & mut self . flag ;
1541
+ let p = & mut self . predicate ;
1542
+ self . iter . try_fold ( init, check ( flag, p, fold) ) . into_try ( )
1536
1543
}
1537
1544
}
1538
1545
}
0 commit comments