From eb0473df93b49d6a2ff50f82e435dbd2e19467c7 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Fri, 11 Apr 2014 20:59:18 -0700 Subject: Make Result::{unwrap, unwrap_err} require Show `foo.ok().unwrap()` and `foo.err().unwrap()` are the fallbacks for types that aren't `Show`. Closes #13379 --- src/libstd/result.rs | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'src/libstd/result.rs') diff --git a/src/libstd/result.rs b/src/libstd/result.rs index 8bd36127db2..9ca1443ea50 100644 --- a/src/libstd/result.rs +++ b/src/libstd/result.rs @@ -12,6 +12,7 @@ use clone::Clone; use cmp::Eq; +use std::fmt::Show; use iter::{Iterator, FromIterator}; use option::{None, Option, Some}; @@ -174,46 +175,50 @@ impl Result { } } - ///////////////////////////////////////////////////////////////////////// - // Common special cases - ///////////////////////////////////////////////////////////////////////// - /// Unwraps a result, yielding the content of an `Ok`. - /// Fails if the value is an `Err`. + /// Else it returns `optb`. #[inline] - pub fn unwrap(self) -> T { + pub fn unwrap_or(self, optb: T) -> T { match self { Ok(t) => t, - Err(_) => fail!("called `Result::unwrap()` on an `Err` value") + Err(_) => optb } } /// Unwraps a result, yielding the content of an `Ok`. - /// Else it returns `optb`. + /// If the value is an `Err` then it calls `op` with its value. #[inline] - pub fn unwrap_or(self, optb: T) -> T { + pub fn unwrap_or_handle(self, op: |E| -> T) -> T { match self { Ok(t) => t, - Err(_) => optb + Err(e) => op(e) } } +} +impl Result { /// Unwraps a result, yielding the content of an `Ok`. - /// If the value is an `Err` then it calls `op` with its value. + /// + /// Fails if the value is an `Err`. #[inline] - pub fn unwrap_or_handle(self, op: |E| -> T) -> T { + pub fn unwrap(self) -> T { match self { Ok(t) => t, - Err(e) => op(e) + Err(e) => + fail!("called `Result::unwrap()` on an `Err` value: {}", e) } } +} +impl Result { /// Unwraps a result, yielding the content of an `Err`. + /// /// Fails if the value is an `Ok`. #[inline] pub fn unwrap_err(self) -> E { match self { - Ok(_) => fail!("called `Result::unwrap_err()` on an `Ok` value"), + Ok(t) => + fail!("called `Result::unwrap_err()` on an `Ok` value: {}", t), Err(e) => e } } -- cgit 1.4.1-3-g733a5