I went the “only let introduces bindings” route, and I’m pretty happy so far:
if (left.next(), right.next())
...is (Some(let l), Some(let r)) { /* use l and r */ }...is (Some(let l), None ) { /* use l */ }...is (None, Some(let r)) { /* use r */ }...is (None, None ) { /* use nothing */ }
}
Or you could put the let before the Some(...) as let Some(l), which allows us to keep the current ifletSome(...) = ... syntax. Either of those would feel more consistent than the current implementation.
I went the “only
let
introduces bindings” route, and I’m pretty happy so far:if (left.next(), right.next()) ... is (Some(let l), Some(let r)) { /* use l and r */ } ... is (Some(let l), None ) { /* use l */ } ... is (None, Some(let r)) { /* use r */ } ... is (None, None ) { /* use nothing */ } }
Yeah, they could literally have the same syntax as now, but w/
let
when introducing a variable. So:match (left.next(), right.next()) { (Some(let l), Some(let r)) => {} (Some(let l), None) => {} (None, Some(let l)) => {} (None, None) => {} }
Or you could put the
let
before theSome(...)
aslet Some(l)
, which allows us to keep the currentif let Some(...) = ...
syntax. Either of those would feel more consistent than the current implementation.