about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libstd/option.rs12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/libstd/option.rs b/src/libstd/option.rs
index 6f6f18ab85d..03f5d94b3f5 100644
--- a/src/libstd/option.rs
+++ b/src/libstd/option.rs
@@ -200,18 +200,24 @@ impl<T> Option<T> {
         match self { None => def, Some(v) => f(v) }
     }
 
+    /// Take the value out of the option, leaving a `None` in its place.
+    #[inline]
+    pub fn take(&mut self) -> Option<T> {
+        util::replace(self, None)
+    }
+
     /// As `map_consume`, but swaps a None into the original option rather
     /// than consuming it by-value.
     #[inline]
     pub fn take_map<U>(&mut self, blk: &fn(T) -> U) -> Option<U> {
-        util::replace(self, None).map_consume(blk)
+        self.take().map_consume(blk)
     }
 
     /// As `map_consume_default`, but swaps a None into the original option
     /// rather than consuming it by-value.
     #[inline]
     pub fn take_map_default<U> (&mut self, def: U, blk: &fn(T) -> U) -> U {
-        util::replace(self, None).map_consume_default(def, blk)
+        self.take().map_consume_default(def, blk)
     }
 
     /// Apply a function to the contained value or do nothing
@@ -309,7 +315,7 @@ impl<T> Option<T> {
     #[inline]
     pub fn take_unwrap(&mut self) -> T {
         if self.is_none() { fail!("option::take_unwrap none") }
-        util::replace(self, None).unwrap()
+        self.take().unwrap()
     }
 
     /**