@@ -16,7 +16,7 @@ use clone::Clone;
16
16
use cmp:: Eq ;
17
17
use either;
18
18
use iterator:: Iterator ;
19
- use option:: { None , Option , Some } ;
19
+ use option:: { None , Option , Some , OptionIterator } ;
20
20
use vec;
21
21
use vec:: { OwnedVector , ImmutableVector } ;
22
22
use container:: Container ;
@@ -86,15 +86,15 @@ impl<T, E: ToStr> Result<T, E> {
86
86
///
87
87
/// Example:
88
88
///
89
- /// do read_file(file).iter |buf| {
89
+ /// for buf in read_file(file) {
90
90
/// print_buf(buf)
91
91
/// }
92
92
#[ inline]
93
- pub fn iter ( & self , f : & fn ( & T ) ) {
93
+ pub fn iter < ' r > ( & ' r self ) -> OptionIterator < & ' r T > {
94
94
match * self {
95
- Ok ( ref t) => f ( t) ,
96
- Err ( _ ) => ( ) ,
97
- }
95
+ Ok ( ref t) => Some ( t) ,
96
+ Err ( * ) => None ,
97
+ } . consume_iter ( )
98
98
}
99
99
100
100
/// Call a method based on a previous result
@@ -104,11 +104,11 @@ impl<T, E: ToStr> Result<T, E> {
104
104
/// immediately returned. This function can be used to pass through a
105
105
/// successful result while handling an error.
106
106
#[ inline]
107
- pub fn iter_err ( & self , f : & fn ( & E ) ) {
107
+ pub fn iter_err < ' r > ( & ' r self ) -> OptionIterator < & ' r E > {
108
108
match * self {
109
- Ok ( _ ) => ( ) ,
110
- Err ( ref e ) => f ( e ) ,
111
- }
109
+ Ok ( * ) => None ,
110
+ Err ( ref t ) => Some ( t ) ,
111
+ } . consume_iter ( )
112
112
}
113
113
114
114
/// Unwraps a result, yielding the content of an `Ok`.
@@ -335,21 +335,25 @@ mod tests {
335
335
#[test]
336
336
pub fn test_impl_iter() {
337
337
let mut valid = false;
338
- Ok::<~str, ~str>(~" a").iter(|_x| valid = true);
338
+ let okval = Ok::<~str, ~str>(~" a");
339
+ do okval.iter().next().map |_| { valid = true; };
339
340
assert!(valid);
340
341
341
- Err::<~str, ~str>(~" b").iter(|_x| valid = false);
342
+ let errval = Err::<~str, ~str>(~" b");
343
+ do errval.iter().next().map |_| { valid = false; };
342
344
assert!(valid);
343
345
}
344
346
345
347
#[test]
346
348
pub fn test_impl_iter_err() {
347
349
let mut valid = true;
348
- Ok::<~str, ~str>(~" a").iter_err(|_x| valid = false);
350
+ let okval = Ok::<~str, ~str>(~" a");
351
+ do okval.iter_err().next().map |_| { valid = false };
349
352
assert!(valid);
350
353
351
354
valid = false;
352
- Err::<~str, ~str>(~" b").iter_err(|_x| valid = true);
355
+ let errval = Err::<~str, ~str>(~" b");
356
+ do errval.iter_err().next().map |_| { valid = true };
353
357
assert!(valid);
354
358
}
355
359
0 commit comments