-
Notifications
You must be signed in to change notification settings - Fork 3.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ch18-03: Guarded match arm exhaustivness clarification #3397
ch18-03: Guarded match arm exhaustivness clarification #3397
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, but the original text here is correct, it is just not exhaustively correct! That's an important balance we have to walk given how long the book already is. Going to close this accordingly.
|
Oh good grief, I hit the wrong button again. 😂 GitHub’s UI is going to be the death of me! Thanks again! |
Update books ## rust-lang/book 41 commits in 3131aa4642c627a24f523c82566b94a7d920f68c..d207d894cc5e1d496ab99beeacd1a420e5d4d238 2024-04-19 19:48:19 UTC to 2024-04-08 19:34:07 UTC - Ch. 2: intentionally use `{}` at first (rust-lang/book#3898) - Inline fmt lints for `redirects/` (rust-lang/book#3897) - ch12-03: `expect` is not used multitude times by this chapter (rust-lang/book#3287) - Inline format args to `tools/src` (rust-lang/book#3896) - Improve awkward phrasing around the kinds of closures (rust-lang/book#3290) - Ch. 14: clarify workspace dependency reuse (rust-lang/book#3890) - Edit on line no. 153. Replaced fn add_to_waitlist with fn eat_at_restaurant. (rust-lang/book#3281) - Ch. 2: less ambiguity about numbers (rust-lang/book#3895) - Clarified first slices paragraph (rust-lang/book#3363) - Inline all format arguments (rust-lang/book#3385) - Use v1.58 captured ident formatting in examples (rust-lang/book#3048) - Revert "ch18-03: Guarded match arm exhaustivness clarification" (rust-lang/book#3894) - Ch. 18: further clarify about irrefutable patterns (rust-lang/book#3893) - ch18-02: Minor corrections (rust-lang/book#3381) - Make style of listings 9-7 and 9-8 consistent with 9-6 (rust-lang/book#3217) - ch18-03: Guarded match arm exhaustivness clarification (rust-lang/book#3397) - ch11-03: Unnecessary import removal (rust-lang/book#3284) - Update ch20-01-single-threaded.md (rust-lang/book#3394) - In Appendix D, adds hyperlink to Appendix E (rust-lang/book#3418) - Chapter 13-03 fixed Iterator 'type' to 'trait' (rust-lang/book#3433) - Fix the expected substring in ch11-01 (rust-lang/book#3534) - Ch. 17: clarify 'in order to compile' (rust-lang/book#3892) - Revert "Chapter 15-05: Fix incorrect interpretation of compiler error" (rust-lang/book#3891) - Chapter 15-05: Fix incorrect interpretation of compiler error (rust-lang/book#3501) - Remove direction to authenticate with `cargo login {API token}` (rust-lang/book#3506) - Update syn dependencies in Chapter 19 to 2.0 (rust-lang/book#3888) - Chapter 3: Clarify `return` vs. `break`. (rust-lang/book#3889) - Fix "`Display` type" to "`Display` trait" in ch19-03 (rust-lang/book#3835) - Update listings in ch 11-01 to reflect current output from cargo new (rust-lang/book#3533) - Fix "`test` module" to "`tests` module" in ch11-03 (rust-lang/book#3579) - Ch. 2: fix wording about `cargo update` (rust-lang/book#3882) - Remove hebrew niqqud in 8-14 String::from example (rust-lang/book#3648) - Ch. 16: fix a grammar issue (rust-lang/book#3881) - Update MSVC instructions (rust-lang/book#3616) - Replace RLS with rust-analyzer in ch00 (rust-lang/book#3546) - Fix em dashes (rust-lang/book#3570) - Revert rust-lang#3711 (rust-lang/book#3880) - Procedure Macro: Update dependencies (rust-lang/book#3631) - Parity with rustup's help (rust-lang/book#3642) - Fix confusing sentence (rust-lang/book#3877) - Ch. 7: add a note about the need for `pub` in one more place (rust-lang/book#3879) ## rust-lang/edition-guide 2 commits in eb3eb80e106d03250c1fb7c5666b1c8c59672862..0c68e90acaae5a611f8f5098a3c2980de9845ab2 2024-04-16 21:23:55 UTC to 2024-04-15 16:05:32 UTC - Document RustcEncodable/RustcDecodable (rust-lang/edition-guide#298) - Flesh out detail behind disallowing refs to static mut (rust-lang/edition-guide#299) ## rust-lang/reference 5 commits in 55694913b1301cc809f9bf4a1ad1b3d6920efbd9..5854fcc286557ad3ab34d325073d11d8118096b6 2024-04-21 13:47:07 UTC to 2024-04-15 16:12:40 UTC - Stabilize Wasm target features that are in phase 4 and 5 (rust-lang/reference#1420) - Expand and clarify primitive alignment (rust-lang/reference#1493) - Update clone reference to include closures (rust-lang/reference#1492) - Document how `non_exhaustive` interacts with tuple and unit-like structs. (rust-lang/reference#1491) - Fix link to RISC-V Zkt spec; it was pointing to Zkr (rust-lang/reference#1490) ## rust-lang/rustc-dev-guide 4 commits in b77a34bd46399687b4ce6a17198e9f316c988794..07425fed36b00e60341c5e29e28d37d40cbd4451 2024-04-13 15:16:44 UTC to 2024-04-08 19:00:54 UTC - Add a note about checks with multiple revisions (rust-lang/rustc-dev-guide#1963) - compiletest: clarify that headers must be one header per line (rust-lang/rustc-dev-guide#1962) - chore: fix some typos in conments (rust-lang/rustc-dev-guide#1961) - compiletest: specify which special env var and which particular CI job (rust-lang/rustc-dev-guide#1960)
Rollup merge of rust-lang#124268 - rustbot:docs-update, r=ehuss Update books ## rust-lang/book 41 commits in 3131aa4642c627a24f523c82566b94a7d920f68c..d207d894cc5e1d496ab99beeacd1a420e5d4d238 2024-04-19 19:48:19 UTC to 2024-04-08 19:34:07 UTC - Ch. 2: intentionally use `{}` at first (rust-lang/book#3898) - Inline fmt lints for `redirects/` (rust-lang/book#3897) - ch12-03: `expect` is not used multitude times by this chapter (rust-lang/book#3287) - Inline format args to `tools/src` (rust-lang/book#3896) - Improve awkward phrasing around the kinds of closures (rust-lang/book#3290) - Ch. 14: clarify workspace dependency reuse (rust-lang/book#3890) - Edit on line no. 153. Replaced fn add_to_waitlist with fn eat_at_restaurant. (rust-lang/book#3281) - Ch. 2: less ambiguity about numbers (rust-lang/book#3895) - Clarified first slices paragraph (rust-lang/book#3363) - Inline all format arguments (rust-lang/book#3385) - Use v1.58 captured ident formatting in examples (rust-lang/book#3048) - Revert "ch18-03: Guarded match arm exhaustivness clarification" (rust-lang/book#3894) - Ch. 18: further clarify about irrefutable patterns (rust-lang/book#3893) - ch18-02: Minor corrections (rust-lang/book#3381) - Make style of listings 9-7 and 9-8 consistent with 9-6 (rust-lang/book#3217) - ch18-03: Guarded match arm exhaustivness clarification (rust-lang/book#3397) - ch11-03: Unnecessary import removal (rust-lang/book#3284) - Update ch20-01-single-threaded.md (rust-lang/book#3394) - In Appendix D, adds hyperlink to Appendix E (rust-lang/book#3418) - Chapter 13-03 fixed Iterator 'type' to 'trait' (rust-lang/book#3433) - Fix the expected substring in ch11-01 (rust-lang/book#3534) - Ch. 17: clarify 'in order to compile' (rust-lang/book#3892) - Revert "Chapter 15-05: Fix incorrect interpretation of compiler error" (rust-lang/book#3891) - Chapter 15-05: Fix incorrect interpretation of compiler error (rust-lang/book#3501) - Remove direction to authenticate with `cargo login {API token}` (rust-lang/book#3506) - Update syn dependencies in Chapter 19 to 2.0 (rust-lang/book#3888) - Chapter 3: Clarify `return` vs. `break`. (rust-lang/book#3889) - Fix "`Display` type" to "`Display` trait" in ch19-03 (rust-lang/book#3835) - Update listings in ch 11-01 to reflect current output from cargo new (rust-lang/book#3533) - Fix "`test` module" to "`tests` module" in ch11-03 (rust-lang/book#3579) - Ch. 2: fix wording about `cargo update` (rust-lang/book#3882) - Remove hebrew niqqud in 8-14 String::from example (rust-lang/book#3648) - Ch. 16: fix a grammar issue (rust-lang/book#3881) - Update MSVC instructions (rust-lang/book#3616) - Replace RLS with rust-analyzer in ch00 (rust-lang/book#3546) - Fix em dashes (rust-lang/book#3570) - Revert rust-lang#3711 (rust-lang/book#3880) - Procedure Macro: Update dependencies (rust-lang/book#3631) - Parity with rustup's help (rust-lang/book#3642) - Fix confusing sentence (rust-lang/book#3877) - Ch. 7: add a note about the need for `pub` in one more place (rust-lang/book#3879) ## rust-lang/edition-guide 2 commits in eb3eb80e106d03250c1fb7c5666b1c8c59672862..0c68e90acaae5a611f8f5098a3c2980de9845ab2 2024-04-16 21:23:55 UTC to 2024-04-15 16:05:32 UTC - Document RustcEncodable/RustcDecodable (rust-lang/edition-guide#298) - Flesh out detail behind disallowing refs to static mut (rust-lang/edition-guide#299) ## rust-lang/reference 5 commits in 55694913b1301cc809f9bf4a1ad1b3d6920efbd9..5854fcc286557ad3ab34d325073d11d8118096b6 2024-04-21 13:47:07 UTC to 2024-04-15 16:12:40 UTC - Stabilize Wasm target features that are in phase 4 and 5 (rust-lang/reference#1420) - Expand and clarify primitive alignment (rust-lang/reference#1493) - Update clone reference to include closures (rust-lang/reference#1492) - Document how `non_exhaustive` interacts with tuple and unit-like structs. (rust-lang/reference#1491) - Fix link to RISC-V Zkt spec; it was pointing to Zkr (rust-lang/reference#1490) ## rust-lang/rustc-dev-guide 4 commits in b77a34bd46399687b4ce6a17198e9f316c988794..07425fed36b00e60341c5e29e28d37d40cbd4451 2024-04-13 15:16:44 UTC to 2024-04-08 19:00:54 UTC - Add a note about checks with multiple revisions (rust-lang/rustc-dev-guide#1963) - compiletest: clarify that headers must be one header per line (rust-lang/rustc-dev-guide#1962) - chore: fix some typos in conments (rust-lang/rustc-dev-guide#1961) - compiletest: specify which special env var and which particular CI job (rust-lang/rustc-dev-guide#1960)
Update books ## rust-lang/book 41 commits in 3131aa4642c627a24f523c82566b94a7d920f68c..d207d894cc5e1d496ab99beeacd1a420e5d4d238 2024-04-19 19:48:19 UTC to 2024-04-08 19:34:07 UTC - Ch. 2: intentionally use `{}` at first (rust-lang/book#3898) - Inline fmt lints for `redirects/` (rust-lang/book#3897) - ch12-03: `expect` is not used multitude times by this chapter (rust-lang/book#3287) - Inline format args to `tools/src` (rust-lang/book#3896) - Improve awkward phrasing around the kinds of closures (rust-lang/book#3290) - Ch. 14: clarify workspace dependency reuse (rust-lang/book#3890) - Edit on line no. 153. Replaced fn add_to_waitlist with fn eat_at_restaurant. (rust-lang/book#3281) - Ch. 2: less ambiguity about numbers (rust-lang/book#3895) - Clarified first slices paragraph (rust-lang/book#3363) - Inline all format arguments (rust-lang/book#3385) - Use v1.58 captured ident formatting in examples (rust-lang/book#3048) - Revert "ch18-03: Guarded match arm exhaustivness clarification" (rust-lang/book#3894) - Ch. 18: further clarify about irrefutable patterns (rust-lang/book#3893) - ch18-02: Minor corrections (rust-lang/book#3381) - Make style of listings 9-7 and 9-8 consistent with 9-6 (rust-lang/book#3217) - ch18-03: Guarded match arm exhaustivness clarification (rust-lang/book#3397) - ch11-03: Unnecessary import removal (rust-lang/book#3284) - Update ch20-01-single-threaded.md (rust-lang/book#3394) - In Appendix D, adds hyperlink to Appendix E (rust-lang/book#3418) - Chapter 13-03 fixed Iterator 'type' to 'trait' (rust-lang/book#3433) - Fix the expected substring in ch11-01 (rust-lang/book#3534) - Ch. 17: clarify 'in order to compile' (rust-lang/book#3892) - Revert "Chapter 15-05: Fix incorrect interpretation of compiler error" (rust-lang/book#3891) - Chapter 15-05: Fix incorrect interpretation of compiler error (rust-lang/book#3501) - Remove direction to authenticate with `cargo login {API token}` (rust-lang/book#3506) - Update syn dependencies in Chapter 19 to 2.0 (rust-lang/book#3888) - Chapter 3: Clarify `return` vs. `break`. (rust-lang/book#3889) - Fix "`Display` type" to "`Display` trait" in ch19-03 (rust-lang/book#3835) - Update listings in ch 11-01 to reflect current output from cargo new (rust-lang/book#3533) - Fix "`test` module" to "`tests` module" in ch11-03 (rust-lang/book#3579) - Ch. 2: fix wording about `cargo update` (rust-lang/book#3882) - Remove hebrew niqqud in 8-14 String::from example (rust-lang/book#3648) - Ch. 16: fix a grammar issue (rust-lang/book#3881) - Update MSVC instructions (rust-lang/book#3616) - Replace RLS with rust-analyzer in ch00 (rust-lang/book#3546) - Fix em dashes (rust-lang/book#3570) - Revert #3711 (rust-lang/book#3880) - Procedure Macro: Update dependencies (rust-lang/book#3631) - Parity with rustup's help (rust-lang/book#3642) - Fix confusing sentence (rust-lang/book#3877) - Ch. 7: add a note about the need for `pub` in one more place (rust-lang/book#3879) ## rust-lang/edition-guide 2 commits in eb3eb80e106d03250c1fb7c5666b1c8c59672862..0c68e90acaae5a611f8f5098a3c2980de9845ab2 2024-04-16 21:23:55 UTC to 2024-04-15 16:05:32 UTC - Document RustcEncodable/RustcDecodable (rust-lang/edition-guide#298) - Flesh out detail behind disallowing refs to static mut (rust-lang/edition-guide#299) ## rust-lang/reference 5 commits in 55694913b1301cc809f9bf4a1ad1b3d6920efbd9..5854fcc286557ad3ab34d325073d11d8118096b6 2024-04-21 13:47:07 UTC to 2024-04-15 16:12:40 UTC - Stabilize Wasm target features that are in phase 4 and 5 (rust-lang/reference#1420) - Expand and clarify primitive alignment (rust-lang/reference#1493) - Update clone reference to include closures (rust-lang/reference#1492) - Document how `non_exhaustive` interacts with tuple and unit-like structs. (rust-lang/reference#1491) - Fix link to RISC-V Zkt spec; it was pointing to Zkr (rust-lang/reference#1490) ## rust-lang/rustc-dev-guide 4 commits in b77a34bd46399687b4ce6a17198e9f316c988794..07425fed36b00e60341c5e29e28d37d40cbd4451 2024-04-13 15:16:44 UTC to 2024-04-08 19:00:54 UTC - Add a note about checks with multiple revisions (rust-lang/rustc-dev-guide#1963) - compiletest: clarify that headers must be one header per line (rust-lang/rustc-dev-guide#1962) - chore: fix some typos in conments (rust-lang/rustc-dev-guide#1961) - compiletest: specify which special env var and which particular CI job (rust-lang/rustc-dev-guide#1960)
As per experimentation shows,
match
arms exhaustivness is checked even when arms use match guard.This simple sample
produces output
Notable observations are
Some(_n) if true => println!("Exhausted")
catches already any otherSome
other thanSome(50)
.None => (),
change to_ => (),
, compilation produces no error.Obviously compiler does no heuristics on possible results of
match
guard. But it still acts as if makes strong check on arms exhaustivness.