This commit is contained in:
Lynne 2025-04-13 13:31:12 +02:00 committed by GitHub
commit 7af125d8c9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1195,6 +1195,28 @@ mod ref_keyword {}
/// Ok(())
/// }
/// ```
///
/// Within [closures] and [`async`] blocks, `return` returns a value from within the closure or
/// `async` block, not from the parent function:
///
/// ```rust
/// fn foo() -> i32 {
/// let closure = || {
/// return 5;
/// };
///
/// let future = async {
/// return 10;
/// };
///
/// return 15;
/// }
///
/// assert_eq!(foo(), 15);
/// ```
///
/// [closures]: ../book/ch13-01-closures.html
/// [`async`]: ../std/keyword.async.html
mod return_keyword {}
#[doc(keyword = "self")]
@ -2388,6 +2410,40 @@ mod while_keyword {}
///
/// We have written an [async book] detailing `async`/`await` and trade-offs compared to using threads.
///
/// ## Control Flow
/// [`return`] statements and [`?`][try operator] operators within `async` blocks do not cause
/// a return from the parent function; rather, they cause the `Future` returned by the block to
/// return with that value.
///
/// For example, the following Rust function will return `5`, assigning the `!` value to `x`, which
/// goes unused:
/// ```rust
/// #[expect(unused_variables)]
/// fn example() -> i32 {
/// let x = {
/// return 5;
/// };
/// }
/// ```
/// In contrast, the following asynchronous function assigns a `Future<Output = i32>` to `x`, and
/// only returns `5` when `x` is `.await`ed:
/// ```rust
/// async fn example() -> i32 {
/// let x = async {
/// return 5;
/// };
///
/// x.await
/// }
/// ```
/// Code using `?` behaves similarly - it causes the `async` block to return a [`Result`] without
/// affecting the parent function.
///
/// Note that you cannot use `break` or `continue` from within an `async` block to affect the
/// control flow of a loop in the parent function.
///
/// Control flow in `async` blocks is documented further in the [async book][async book blocks].
///
/// ## Editions
///
/// `async` is a keyword from the 2018 edition onwards.
@ -2397,6 +2453,10 @@ mod while_keyword {}
/// [`Future`]: future::Future
/// [`.await`]: ../std/keyword.await.html
/// [async book]: https://rust-lang.github.io/async-book/
/// [`return`]: ../std/keyword.return.html
/// [try operator]: ../reference/expressions/operator-expr.html#r-expr.try
/// [`Result`]: result::Result
/// [async book blocks]: https://rust-lang.github.io/async-book/part-guide/more-async-await.html#async-blocks
mod async_keyword {}
#[doc(keyword = "await")]