diff options
| author | bors <bors@rust-lang.org> | 2020-05-14 12:28:23 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-05-14 12:28:23 +0000 |
| commit | af6d8865fe0e1f6338c32cb3370802f2ebca0dc4 (patch) | |
| tree | 2fd89879edd8b151150a11ebfca69825885616d6 /src/libcore | |
| parent | 7c34d8d6629506a596215886e5fc4bb2b04b00ae (diff) | |
| parent | 56986bebc23788146dc46606d5af39b6354d6ad3 (diff) | |
| download | rust-af6d8865fe0e1f6338c32cb3370802f2ebca0dc4.tar.gz rust-af6d8865fe0e1f6338c32cb3370802f2ebca0dc4.zip | |
Auto merge of #72187 - RalfJung:rollup-a7a9jdi, r=RalfJung
Rollup of 12 pull requests Successful merges: - #71525 (`prefix` should not be mutable.) - #71741 (Pointer printing: do not print 0 offset) - #71870 (Be slightly more precise about any::type_name()'s guarantees.) - #71909 (Document From trait for Option implementations) - #71964 (Fix bootstrap failing on win32) - #72137 (Clean up E0581 explanation) - #72138 (Add doc comment for `rustc_middle::mir::mono::Linkage`) - #72150 (Remove UnnormalizedProjection) - #72151 (Update books) - #72163 (docs: remove comment referencing non-existent method) - #72169 (Clean up E0582 explanation) - #72183 (Fix Arc::decr_strong_count doc test) Failed merges: r? @ghost
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/any.rs | 16 | ||||
| -rw-r--r-- | src/libcore/option.rs | 45 |
2 files changed, 54 insertions, 7 deletions
diff --git a/src/libcore/any.rs b/src/libcore/any.rs index 39df803bbea..79b6304958d 100644 --- a/src/libcore/any.rs +++ b/src/libcore/any.rs @@ -446,14 +446,16 @@ impl TypeId { /// # Note /// /// This is intended for diagnostic use. The exact contents and format of the -/// string are not specified, other than being a best-effort description of the -/// type. For example, `type_name::<Option<String>>()` could return the -/// `"Option<String>"` or `"std::option::Option<std::string::String>"`, but not -/// `"foobar"`. In addition, the output may change between versions of the -/// compiler. +/// string returned are not specified, other than being a best-effort +/// description of the type. For example, amongst the strings +/// that `type_name::<Option<String>>()` might return are `"Option<String>"` and +/// `"std::option::Option<std::string::String>"`. /// -/// The type name should not be considered a unique identifier of a type; -/// multiple types may share the same type name. +/// The returned string must not be considered to be a unique identifier of a +/// type as multiple types may map to the same type name. Similarly, there is no +/// guarantee that all parts of a type will appear in the returned string: for +/// example, lifetime specifiers are currently not included. In addition, the +/// output may change between versions of the compiler. /// /// The current implementation uses the same infrastructure as compiler /// diagnostics and debuginfo, but this is not guaranteed. diff --git a/src/libcore/option.rs b/src/libcore/option.rs index 63a5277100f..e8483875c97 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -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() } |
