about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authoraochagavia <aochagavia92@gmail.com>2014-03-13 21:28:36 +0100
committeraochagavia <aochagavia92@gmail.com>2014-03-13 21:45:21 +0100
commit6ff207b415233072bff2efb4b7b0f5fe883348e5 (patch)
treec41384e1d86119b2098ddf527a3f3efe2b769b13 /src/libstd
parent62f1d68439dcfd509eaca29887afa97f22938373 (diff)
downloadrust-6ff207b415233072bff2efb4b7b0f5fe883348e5.tar.gz
rust-6ff207b415233072bff2efb4b7b0f5fe883348e5.zip
Refactored while_some (libstd/option.rs)
The old 'while' needed to match 2 times for each iteration. With the new
'loop' there is just one match needed.

I have also replaced 'blk' by 'f' to be more consistent with parameter
names in other functions that are implemented for Option
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/option.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/libstd/option.rs b/src/libstd/option.rs
index 86f8c143a9e..5b5138c6c12 100644
--- a/src/libstd/option.rs
+++ b/src/libstd/option.rs
@@ -295,10 +295,13 @@ impl<T> Option<T> {
 
     /// Applies a function zero or more times until the result is `None`.
     #[inline]
-    pub fn while_some(self, blk: |v: T| -> Option<T>) {
+    pub fn while_some(self, f: |v: T| -> Option<T>) {
         let mut opt = self;
-        while opt.is_some() {
-            opt = blk(opt.unwrap());
+        loop {
+            match opt {
+                Some(x) => opt = f(x),
+                None => break
+            }
         }
     }