From e2a42416ddab88f7ed076cb9a4fd6ecc70be3278 Mon Sep 17 00:00:00 2001 From: Ben Blum Date: Fri, 12 Jul 2013 22:40:57 -0400 Subject: [PATCH] Add option::take(), the building block of the option::take_* family. --- src/libstd/option.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/libstd/option.rs b/src/libstd/option.rs index 6f6f18ab85d3..03f5d94b3f5f 100644 --- a/src/libstd/option.rs +++ b/src/libstd/option.rs @@ -200,18 +200,24 @@ impl Option { 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 { + 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(&mut self, blk: &fn(T) -> U) -> Option { - 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 (&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 Option { #[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() } /**