Rollup merge of #91346 - ibraheemdev:result-inspect, r=dtolnay
Add `Option::inspect` and `Result::{inspect, inspect_err}` ```rust // core::result impl Result<T, E> { pub fn inspect<F: FnOnce(&T)>(self, f: F) -> Self; pub fn inspect_err<F: FnOnce(&E)>(self, f: F) -> Self; } // core::option impl Option<T> { pub fn inspect<F: FnOnce(&T)>(self, f: F) -> Self; } ```
This commit is contained in:
commit
ce197e2bce
@ -848,6 +848,31 @@ pub fn map<U, F: FnOnce(T) -> U>(self, f: F) -> Option<U> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Calls the provided closure with a reference to the contained value (if [`Some`]).
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(result_option_inspect)]
|
||||||
|
///
|
||||||
|
/// let v = vec![1, 2, 3, 4, 5];
|
||||||
|
///
|
||||||
|
/// // prints "got: 4"
|
||||||
|
/// let x: Option<&usize> = v.get(3).inspect(|x| println!("got: {}", x));
|
||||||
|
///
|
||||||
|
/// // prints nothing
|
||||||
|
/// let x: Option<&usize> = v.get(5).inspect(|x| println!("got: {}", x));
|
||||||
|
/// ```
|
||||||
|
#[inline]
|
||||||
|
#[unstable(feature = "result_option_inspect", issue = "91345")]
|
||||||
|
pub fn inspect<F: FnOnce(&T)>(self, f: F) -> Self {
|
||||||
|
if let Some(ref x) = self {
|
||||||
|
f(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the provided default result (if none),
|
/// Returns the provided default result (if none),
|
||||||
/// or applies a function to the contained value (if any).
|
/// or applies a function to the contained value (if any).
|
||||||
///
|
///
|
||||||
|
@ -854,6 +854,53 @@ pub fn map_err<F, O: FnOnce(E) -> F>(self, op: O) -> Result<T, F> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Calls the provided closure with a reference to the contained value (if [`Ok`]).
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(result_option_inspect)]
|
||||||
|
///
|
||||||
|
/// let x: u8 = "4"
|
||||||
|
/// .parse::<u8>()
|
||||||
|
/// .inspect(|x| println!("original: {}", x))
|
||||||
|
/// .map(|x| x.pow(3))
|
||||||
|
/// .expect("failed to parse number");
|
||||||
|
/// ```
|
||||||
|
#[inline]
|
||||||
|
#[unstable(feature = "result_option_inspect", issue = "91345")]
|
||||||
|
pub fn inspect<F: FnOnce(&T)>(self, f: F) -> Self {
|
||||||
|
if let Ok(ref t) = self {
|
||||||
|
f(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Calls the provided closure with a reference to the contained error (if [`Err`]).
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(result_option_inspect)]
|
||||||
|
///
|
||||||
|
/// use std::{fs, io};
|
||||||
|
///
|
||||||
|
/// fn read() -> io::Result<String> {
|
||||||
|
/// fs::read_to_string("address.txt")
|
||||||
|
/// .inspect_err(|e| eprintln!("failed to read file: {}", e))
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
#[inline]
|
||||||
|
#[unstable(feature = "result_option_inspect", issue = "91345")]
|
||||||
|
pub fn inspect_err<F: FnOnce(&E)>(self, f: F) -> Self {
|
||||||
|
if let Err(ref e) = self {
|
||||||
|
f(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// Iterator constructors
|
// Iterator constructors
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
Loading…
Reference in New Issue
Block a user