diff options
| author | Steve Klabnik <steve@steveklabnik.com> | 2016-02-01 18:49:47 -0500 |
|---|---|---|
| committer | Steve Klabnik <steve@steveklabnik.com> | 2016-02-01 18:49:47 -0500 |
| commit | dc3a39d807512c626495c16680df2fffc16e8722 (patch) | |
| tree | 9ccb71433f987214aab89a273ebf740e1df95e5f /src | |
| parent | 91e804409b7481677901345d9abcb6e8bd3152ad (diff) | |
| download | rust-dc3a39d807512c626495c16680df2fffc16e8722.tar.gz rust-dc3a39d807512c626495c16680df2fffc16e8722.zip | |
Explain behavior of _
Fixes #31154
Diffstat (limited to 'src')
| -rw-r--r-- | src/doc/book/patterns.md | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/doc/book/patterns.md b/src/doc/book/patterns.md index 8e9e7246e56..39a9cb1885e 100644 --- a/src/doc/book/patterns.md +++ b/src/doc/book/patterns.md @@ -173,7 +173,31 @@ let (x, _, z) = coordinate(); Here, we bind the first and last element of the tuple to `x` and `z`, but ignore the middle element. -Similarly, you can use `..` in a pattern to disregard multiple values. +It’s worth noting that using `_` never binds the value in the first place, +which means a value may not move: + +```rust +let tuple: (u32, String) = (5, String::from("five")); + +// Here, tuple is moved, because the String moved: +let (x, _s) = tuple; + +// The next line would give "error: use of partially moved value: `tuple`" +// println!("Tuple is: {:?}", tuple); + +// However, + +let tuple = (5, String::from("five")); + +// Here, tuple is _not_ moved, as the String was never moved, and u32 is Copy: +let (x, _) = tuple; + +// That means this works: +println!("Tuple is: {:?}", tuple); +``` + +In a similar fashion to `_`, you can use `..` in a pattern to disregard +multiple values: ```rust enum OptionalTuple { |
