diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index 5ed77852ad0a1..f837701d59257 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -119,6 +119,22 @@ pub trait Extend { /// An extension trait providing numerous methods applicable to all iterators. #[stable] pub trait IteratorExt: Iterator + Sized { + /// Executes f foreach element for its side effect. + /// Syntatic suggar over a for loop. + /// + /// # Example + /// + /// ```rust + /// let mut sum = 0i + /// range(0,10).foreach(|x| sum = sum + x) + /// assert!(sum == 55) + /// ``` + fn foreach(&mut self, mut f: F) + where F: FnMut(Self::Item) { + for i in *self { + f(i) + } + } /// Counts the number of elements in this iterator. /// /// # Example diff --git a/src/libcoretest/iter.rs b/src/libcoretest/iter.rs index 61266a9264944..6439c5e4a3107 100644 --- a/src/libcoretest/iter.rs +++ b/src/libcoretest/iter.rs @@ -70,6 +70,13 @@ fn test_multi_iter() { assert!(lt(xs.iter(), xs.iter().skip(2))); } +#[test] +fn test_foreach() { + let mut sum: i32 = 0; + (0..10).foreach(|x| sum = sum + x); + assert!(sum == 45); +} + #[test] fn test_counter_from_iter() { let it = count(0i, 5).take(10);