rust-lang/rust-roadmap-2017

Improved match ergonomics around references

nrc opened this issue · 4 comments

nrc commented

Point of contact

@nrc

Overview

Make match easier to use and less boilerplate-y by auto-dereferencing in the condition expression and inferring refs in the patterns.

E.g.,

fn foo(x: &AnEnum) {
    match x {
        AnEnum::VariantA(y) => { ... }
        AnEnum::VariantB(y, z) => { ... }
    }
}

rather than (currently):

fn foo(x: &AnEnum) {
    match *x {
        AnEnum::VariantA(ref y) => { ... }
        AnEnum::VariantB(ref y, ref z) => { ... }
    }
}

Status

Accepted as RFC 2005.

cc #17

If we infer ref in patterns, will we ever need to explicitly tell Rust not to add ref, like we need to use move on closures?

(Let me know if I should wait for the actual RFC to get posted and move this comment there.)

Updated with RFC.

liigo commented

match type &AnEnum against AnEnum? I don't think it's kind of 'pattern matching'.

Note: this feature was accepted as RFC #2005.