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

Closed
opened this Issue Jun 27, 2014 · 3 comments

Projects
None yet
4 participants
Member

### Manishearth commented Jun 27, 2014

 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?

Member

### huonw commented Jun 28, 2014

 As work-around for types like primitives, you can write `match ... { a @ ( 0x2A | ... ) => println!("{}", a), ... }` as ```let x = ...; match x { 0x2A | 0x2D | ... => println!("{}", x), }``` i.e. doing the binding outside the `match`.
Member Author

### Manishearth commented Jun 28, 2014

 Yeah, that's close to what I ended up doing.

Member

### steveklabnik commented Jan 21, 2015

 I'm pulling a massive triage effort to get us ready for 1.0. As part of this, I'm moving stuff that's wishlist-like to the RFCs repo, as that's where major new things should get discussed/prioritized. This issue has been moved to the RFCs repo: rust-lang/rfcs#673

Closed