diff --git a/src/libextra/iter.rs b/src/libextra/iter.rs index 3552ff59783..720a525164a 100644 --- a/src/libextra/iter.rs +++ b/src/libextra/iter.rs @@ -72,12 +72,9 @@ pub trait FromIter { #[inline] pub fn any(predicate: &fn(T) -> bool, iter: &fn(f: &fn(T) -> bool) -> bool) -> bool { - for iter |x| { - if predicate(x) { - return true; - } + do iter |x| { + predicate(x) } - return false; } /** @@ -111,12 +108,14 @@ pub fn all(predicate: &fn(T) -> bool, #[inline] pub fn find(predicate: &fn(&T) -> bool, iter: &fn(f: &fn(T) -> bool) -> bool) -> Option { - for iter |x| { + let mut ret = None; + do iter |x| { if predicate(&x) { - return Some(x); - } - } - None + ret = Some(x); + false + } else { true } + }; + ret } /** @@ -132,7 +131,7 @@ pub fn find(predicate: &fn(&T) -> bool, #[inline] pub fn max(iter: &fn(f: &fn(T) -> bool) -> bool) -> Option { let mut result = None; - for iter |x| { + do iter |x| { match result { Some(ref mut y) => { if x > *y { @@ -141,7 +140,8 @@ pub fn max(iter: &fn(f: &fn(T) -> bool) -> bool) -> Option { } None => result = Some(x) } - } + true + }; result } @@ -158,7 +158,7 @@ pub fn max(iter: &fn(f: &fn(T) -> bool) -> bool) -> Option { #[inline] pub fn min(iter: &fn(f: &fn(T) -> bool) -> bool) -> Option { let mut result = None; - for iter |x| { + do iter |x| { match result { Some(ref mut y) => { if x < *y { @@ -167,7 +167,8 @@ pub fn min(iter: &fn(f: &fn(T) -> bool) -> bool) -> Option { } None => result = Some(x) } - } + true + }; result } @@ -183,9 +184,10 @@ pub fn min(iter: &fn(f: &fn(T) -> bool) -> bool) -> Option { #[inline] pub fn fold(start: T, iter: &fn(f: &fn(U) -> bool) -> bool, f: &fn(&mut T, U)) -> T { let mut result = start; - for iter |x| { + do iter |x| { f(&mut result, x); - } + true + }; result } @@ -206,9 +208,10 @@ pub fn fold(start: T, iter: &fn(f: &fn(U) -> bool) -> bool, f: &fn(&mut T, #[inline] pub fn fold_ref(start: T, iter: &fn(f: &fn(&U) -> bool) -> bool, f: &fn(&mut T, &U)) -> T { let mut result = start; - for iter |x| { + do iter |x| { f(&mut result, x); - } + true + }; result } @@ -246,7 +249,7 @@ impl FromIter for ~[T]{ #[inline] pub fn from_iter(iter: &fn(f: &fn(T) -> bool) -> bool) -> ~[T] { let mut v = ~[]; - for iter |x| { v.push(x) } + do iter |x| { v.push(x); true }; v } }