Rollup merge of #71909 - Dolpheyn:doc-from-trait-for-option, r=steveklabnik
Document From trait for Option implementations Add documentation for ```From``` trait for ```std::option::Option``` implementations This PR solves a part of #51430 ( CC @skade ) This is my first PR ever in contributing for OSS. I'm happy to learn and make any changes if necessary :)
This commit is contained in:
commit
a6c1f61db7
@ -1357,6 +1357,15 @@ impl<'a, T> IntoIterator for &'a mut Option<T> {
|
||||
|
||||
#[stable(since = "1.12.0", feature = "option_from")]
|
||||
impl<T> From<T> for Option<T> {
|
||||
/// Copies `val` into a new `Some`.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// let o: Option<u8> = Option::from(67);
|
||||
///
|
||||
/// assert_eq!(Some(67), o);
|
||||
/// ```
|
||||
fn from(val: T) -> Option<T> {
|
||||
Some(val)
|
||||
}
|
||||
@ -1364,6 +1373,27 @@ impl<T> From<T> for Option<T> {
|
||||
|
||||
#[stable(feature = "option_ref_from_ref_option", since = "1.30.0")]
|
||||
impl<'a, T> From<&'a Option<T>> for Option<&'a T> {
|
||||
/// Converts from `&Option<T>` to `Option<&T>`.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Converts an `Option<`[`String`]`>` into an `Option<`[`usize`]`>`, preserving the original.
|
||||
/// The [`map`] method takes the `self` argument by value, consuming the original,
|
||||
/// so this technique uses `as_ref` to first take an `Option` to a reference
|
||||
/// to the value inside the original.
|
||||
///
|
||||
/// [`map`]: ../../std/option/enum.Option.html#method.map
|
||||
/// [`String`]: ../../std/string/struct.String.html
|
||||
/// [`usize`]: ../../std/primitive.usize.html
|
||||
///
|
||||
/// ```
|
||||
/// let s: Option<String> = Some(String::from("Hello, Rustaceans!"));
|
||||
/// let o: Option<usize> = Option::from(&s).map(|ss: &String| ss.len());
|
||||
///
|
||||
/// println!("Can still print s: {:?}", s);
|
||||
///
|
||||
/// assert_eq!(o, Some(18));
|
||||
/// ```
|
||||
fn from(o: &'a Option<T>) -> Option<&'a T> {
|
||||
o.as_ref()
|
||||
}
|
||||
@ -1371,6 +1401,21 @@ impl<'a, T> From<&'a Option<T>> for Option<&'a T> {
|
||||
|
||||
#[stable(feature = "option_ref_from_ref_option", since = "1.30.0")]
|
||||
impl<'a, T> From<&'a mut Option<T>> for Option<&'a mut T> {
|
||||
/// Converts from `&mut Option<T>` to `Option<&mut T>`
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// let mut s = Some(String::from("Hello"));
|
||||
/// let o: Option<&mut String> = Option::from(&mut s);
|
||||
///
|
||||
/// match o {
|
||||
/// Some(t) => *t = String::from("Hello, Rustaceans!"),
|
||||
/// None => (),
|
||||
/// }
|
||||
///
|
||||
/// assert_eq!(s, Some(String::from("Hello, Rustaceans!")));
|
||||
/// ```
|
||||
fn from(o: &'a mut Option<T>) -> Option<&'a mut T> {
|
||||
o.as_mut()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user