mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Stabilize Option::deref and Option::deref_mut
The tracking issue https://github.com/rust-lang/rust/issues/50264 still has unresolved question for the corresponding `Result` methods.
This commit is contained in:
parent
66bf391c3a
commit
0797712e29
@ -1102,7 +1102,6 @@ impl<T: Default> Option<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
|
|
||||||
impl<T: Deref> Option<T> {
|
impl<T: Deref> Option<T> {
|
||||||
/// Converts from `Option<T>` (or `&Option<T>`) to `Option<&T::Target>`.
|
/// Converts from `Option<T>` (or `&Option<T>`) to `Option<&T::Target>`.
|
||||||
///
|
///
|
||||||
@ -1114,20 +1113,18 @@ impl<T: Deref> Option<T> {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// #![feature(inner_deref)]
|
|
||||||
///
|
|
||||||
/// let x: Option<String> = Some("hey".to_owned());
|
/// let x: Option<String> = Some("hey".to_owned());
|
||||||
/// assert_eq!(x.as_deref(), Some("hey"));
|
/// assert_eq!(x.as_deref(), Some("hey"));
|
||||||
///
|
///
|
||||||
/// let x: Option<String> = None;
|
/// let x: Option<String> = None;
|
||||||
/// assert_eq!(x.as_deref(), None);
|
/// assert_eq!(x.as_deref(), None);
|
||||||
/// ```
|
/// ```
|
||||||
|
#[stable(feature = "option_deref", since = "1.40.0")]
|
||||||
pub fn as_deref(&self) -> Option<&T::Target> {
|
pub fn as_deref(&self) -> Option<&T::Target> {
|
||||||
self.as_ref().map(|t| t.deref())
|
self.as_ref().map(|t| t.deref())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
|
|
||||||
impl<T: DerefMut> Option<T> {
|
impl<T: DerefMut> Option<T> {
|
||||||
/// Converts from `Option<T>` (or `&mut Option<T>`) to `Option<&mut T::Target>`.
|
/// Converts from `Option<T>` (or `&mut Option<T>`) to `Option<&mut T::Target>`.
|
||||||
///
|
///
|
||||||
@ -1137,14 +1134,13 @@ impl<T: DerefMut> Option<T> {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// #![feature(inner_deref)]
|
|
||||||
///
|
|
||||||
/// let mut x: Option<String> = Some("hey".to_owned());
|
/// let mut x: Option<String> = Some("hey".to_owned());
|
||||||
/// assert_eq!(x.as_deref_mut().map(|x| {
|
/// assert_eq!(x.as_deref_mut().map(|x| {
|
||||||
/// x.make_ascii_uppercase();
|
/// x.make_ascii_uppercase();
|
||||||
/// x
|
/// x
|
||||||
/// }), Some("HEY".to_owned().as_mut_str()));
|
/// }), Some("HEY".to_owned().as_mut_str()));
|
||||||
/// ```
|
/// ```
|
||||||
|
#[stable(feature = "option_deref", since = "1.40.0")]
|
||||||
pub fn as_deref_mut(&mut self) -> Option<&mut T::Target> {
|
pub fn as_deref_mut(&mut self) -> Option<&mut T::Target> {
|
||||||
self.as_mut().map(|t| t.deref_mut())
|
self.as_mut().map(|t| t.deref_mut())
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,6 @@
|
|||||||
#![feature(const_transmute)]
|
#![feature(const_transmute)]
|
||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
#![feature(drain_filter)]
|
#![feature(drain_filter)]
|
||||||
#![feature(inner_deref)]
|
|
||||||
#![cfg_attr(windows, feature(libc))]
|
#![cfg_attr(windows, feature(libc))]
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
#![feature(exhaustive_patterns)]
|
#![feature(exhaustive_patterns)]
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
|
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
|
||||||
|
|
||||||
#![feature(inner_deref)]
|
|
||||||
#![feature(crate_visibility_modifier)]
|
#![feature(crate_visibility_modifier)]
|
||||||
#![feature(label_break_value)]
|
#![feature(label_break_value)]
|
||||||
#![feature(mem_take)]
|
#![feature(mem_take)]
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
|
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
|
||||||
#![feature(nll)]
|
#![feature(nll)]
|
||||||
#![feature(inner_deref)]
|
|
||||||
|
|
||||||
#![recursion_limit="256"]
|
#![recursion_limit="256"]
|
||||||
|
|
||||||
|
@ -67,7 +67,6 @@ This API is completely unstable and subject to change.
|
|||||||
#![feature(nll)]
|
#![feature(nll)]
|
||||||
#![feature(slice_patterns)]
|
#![feature(slice_patterns)]
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
#![feature(inner_deref)]
|
|
||||||
#![feature(mem_take)]
|
#![feature(mem_take)]
|
||||||
|
|
||||||
#![recursion_limit="256"]
|
#![recursion_limit="256"]
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#![feature(crate_visibility_modifier)]
|
#![feature(crate_visibility_modifier)]
|
||||||
#![feature(const_fn)]
|
#![feature(const_fn)]
|
||||||
#![feature(drain_filter)]
|
#![feature(drain_filter)]
|
||||||
#![feature(inner_deref)]
|
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
#![feature(mem_take)]
|
#![feature(mem_take)]
|
||||||
#![feature(unicode_internals)]
|
#![feature(unicode_internals)]
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#![feature(inner_deref)]
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let _result = &Some(42).as_deref();
|
let _result = &Some(42).as_deref();
|
||||||
//~^ ERROR no method named `as_deref` found for type `std::option::Option<{integer}>`
|
//~^ ERROR no method named `as_deref` found for type `std::option::Option<{integer}>`
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
error[E0599]: no method named `as_deref` found for type `std::option::Option<{integer}>` in the current scope
|
error[E0599]: no method named `as_deref` found for type `std::option::Option<{integer}>` in the current scope
|
||||||
--> $DIR/option-as_deref.rs:4:29
|
--> $DIR/option-as_deref.rs:2:29
|
||||||
|
|
|
|
||||||
LL | let _result = &Some(42).as_deref();
|
LL | let _result = &Some(42).as_deref();
|
||||||
| ^^^^^^^^ help: there is a method with a similar name: `as_ref`
|
| ^^^^^^^^ help: there is a method with a similar name: `as_ref`
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#![feature(inner_deref)]
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let _result = &mut Some(42).as_deref_mut();
|
let _result = &mut Some(42).as_deref_mut();
|
||||||
//~^ ERROR no method named `as_deref_mut` found for type `std::option::Option<{integer}>`
|
//~^ ERROR no method named `as_deref_mut` found for type `std::option::Option<{integer}>`
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
error[E0599]: no method named `as_deref_mut` found for type `std::option::Option<{integer}>` in the current scope
|
error[E0599]: no method named `as_deref_mut` found for type `std::option::Option<{integer}>` in the current scope
|
||||||
--> $DIR/option-as_deref_mut.rs:4:33
|
--> $DIR/option-as_deref_mut.rs:2:33
|
||||||
|
|
|
|
||||||
LL | let _result = &mut Some(42).as_deref_mut();
|
LL | let _result = &mut Some(42).as_deref_mut();
|
||||||
| ^^^^^^^^^^^^ method not found in `std::option::Option<{integer}>`
|
| ^^^^^^^^^^^^ method not found in `std::option::Option<{integer}>`
|
||||||
|
Loading…
Reference in New Issue
Block a user