Skip to content
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

Variable labeling of complex match arms should be able to label the whole arm #673

Closed
steveklabnik opened this issue Jan 21, 2015 · 6 comments
Labels
T-lang Relevant to the language team, which will review and decide on the RFC.

Comments

@steveklabnik
Copy link
Member

Issue by Manishearth
Friday Jun 27, 2014 at 17:41 GMT

For earlier discussion, see rust-lang/rust#15219

This issue was labelled with: B-RFC, I-papercut in the Rust repository


If I have a match arm like this:

0x2A | 0x2D | 0x2E | 0x30 .. 0x39 | 0x41 .. 0x5A | 0x5F | 0x61..0x7A => {}

the following does not work:

a @ 0x2A | 0x2D | 0x2E | 0x30 .. 0x39 | 0x41 .. 0x5A | 0x5F | 0x61..0x7A => {println("{}",a)}
a @ (0x2A | 0x2D | 0x2E | 0x30 .. 0x39 | 0x41 .. 0x5A | 0x5F | 0x61..0x7A) => {println("{}",a)}

In the former example, the a is bound to the first literal only, and in the latter the compiler thinks that it is a tuple (and complains about the lack of commas).

Of course, one can do

a @ 0x2A | a @ 0x2D | a@ 0x2E | a@ 0x30 .. 0x39 /* etc */=> {println("{}",a)}

but that is cumbersome.

Could we get a way to easily bind a variable to the entire match arm?

@mtdowling
Copy link

👍. It would be much easier to use complex matching if you can label the whole arm at once.

@pnkfelix
Copy link
Member

Just to be clear ... this is only an issue if you are working with data that is being moved into the arm's pattern, right? (Because otherwise you should just be able to bind the match's input to a variable at the outset, and then use that variable within the arm...)

But maybe I a missing a use-case here.

@mtdowling
Copy link

That's basically my use case. Having to define a variable outside of the match turns what could be a single expression (e.g., matching on the result of an expression) into a statement and expression.

@gsingh93
Copy link

+1, just ran into this.

@petrochenkov
Copy link
Contributor

This is a subset of #1882

@petrochenkov petrochenkov added the T-lang Relevant to the language team, which will review and decide on the RFC. label Jan 29, 2018
@Centril
Copy link
Contributor

Centril commented Oct 7, 2018

Closing in favor of rust-lang/rust#54883. We already have pattern_parenthesis for the other part.

@Centril Centril closed this as completed Oct 7, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
T-lang Relevant to the language team, which will review and decide on the RFC.
Projects
None yet
Development

No branches or pull requests

6 participants