I’d like to add another option to that list:
let match Variant0(x) = expr {
Variant1(..) => ...,
Variant2(..) => ...,
...
}
// `x` is in-scope here
I think this is preferable to let ... else
for a couple of reasons. Firstly, it’s just as powerful since you can use a single match branch to blindly capture all possibilities other than the pattern you were looking for. eg:
let match Foo(x) = expr {
_ => return,
}
Secondly, when you test to see whether expr
matches your patten you’re already doing a match on it. So it makes sense to have access to the result of that match in the “else” clause. Otherwise people will end up writing code like this:
let Ok(x) = my_result else {
let err = my_result.unwrap_err(); // ewww! unwrap!
...
}
Edit: Although maybe match let
would be better than let match
. That would make it look like if let
and while let
although that might be a bad thing since match let
binds variables in the code after the block, not in the block.