Rollup merge of #103644 - catlee:catlee/option-question-mark-docs, r=workingjubilee
Add docs for question mark operator for Option As a beginner learning rust, it took me a while to figure out what `?` was doing with Options. I think the documentation of this could be improved. I've used the question mark documentation from the `Result` type as a template here, and tried to come up with a simple example as well.
This commit is contained in:
commit
a270aeee7f
@ -72,6 +72,50 @@
|
||||
//! }
|
||||
//! ```
|
||||
//!
|
||||
//! # The question mark operator, `?`
|
||||
//!
|
||||
//! Similar to the [`Result`] type, when writing code that calls many functions that return the
|
||||
//! [`Option`] type, handling `Some`/`None` can be tedious. The question mark
|
||||
//! operator, [`?`], hides some of the boilerplate of propagating values
|
||||
//! up the call stack.
|
||||
//!
|
||||
//! It replaces this:
|
||||
//!
|
||||
//! ```
|
||||
//! # #![allow(dead_code)]
|
||||
//! fn add_last_numbers(stack: &mut Vec<i32>) -> Option<i32> {
|
||||
//! let a = stack.pop();
|
||||
//! let b = stack.pop();
|
||||
//!
|
||||
//! match (a, b) {
|
||||
//! (Some(x), Some(y)) => Some(x + y),
|
||||
//! _ => None,
|
||||
//! }
|
||||
//! }
|
||||
//!
|
||||
//! ```
|
||||
//!
|
||||
//! With this:
|
||||
//!
|
||||
//! ```
|
||||
//! # #![allow(dead_code)]
|
||||
//! fn add_last_numbers(stack: &mut Vec<i32>) -> Option<i32> {
|
||||
//! Some(stack.pop()? + stack.pop()?)
|
||||
//! }
|
||||
//! ```
|
||||
//!
|
||||
//! *It's much nicer!*
|
||||
//!
|
||||
//! Ending the expression with [`?`] will result in the [`Some`]'s unwrapped value, unless the
|
||||
//! result is [`None`], in which case [`None`] is returned early from the enclosing function.
|
||||
//!
|
||||
//! [`?`] can be used in functions that return [`Option`] because of the
|
||||
//! early return of [`None`] that it provides.
|
||||
//!
|
||||
//! [`?`]: crate::ops::Try
|
||||
//! [`Some`]: Some
|
||||
//! [`None`]: None
|
||||
//!
|
||||
//! # Representation
|
||||
//!
|
||||
//! Rust guarantees to optimize the following types `T` such that
|
||||
|
@ -209,11 +209,10 @@
|
||||
//!
|
||||
//! *It's much nicer!*
|
||||
//!
|
||||
//! Ending the expression with [`?`] will result in the unwrapped
|
||||
//! success ([`Ok`]) value, unless the result is [`Err`], in which case
|
||||
//! [`Err`] is returned early from the enclosing function.
|
||||
//! Ending the expression with [`?`] will result in the [`Ok`]'s unwrapped value, unless the result
|
||||
//! is [`Err`], in which case [`Err`] is returned early from the enclosing function.
|
||||
//!
|
||||
//! [`?`] can only be used in functions that return [`Result`] because of the
|
||||
//! [`?`] can be used in functions that return [`Result`] because of the
|
||||
//! early return of [`Err`] that it provides.
|
||||
//!
|
||||
//! [`expect`]: Result::expect
|
||||
|
Loading…
x
Reference in New Issue
Block a user