• soc@programming.dev
    link
    fedilink
    English
    arrow-up
    4
    ·
    4 days ago

    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 */ }
    }
    
    • sugar_in_your_tea@sh.itjust.works
      link
      fedilink
      arrow-up
      1
      ·
      2 days ago

      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 the Some(...) as let Some(l), which allows us to keep the current if let Some(...) = ... syntax. Either of those would feel more consistent than the current implementation.