3 ms·
Isn't "?" just a sugar for something like the following? That's how I think about it in my mind at least. // with "?" let v = x?; // without "?" let v
by dgellow 5y ago
Isn't "?" just a sugar for something like the following? That's how I think about it in my mind at least.
// with "?"
let v = x?;
// without "?"
let v = match x {
Ok(o) => Ok(o),
Err(e) => return Err(e), // exit current scope due to the return
}.unwrap();
That feels like something that could be done with a macro.
- zozbot234 5y agoYes, that's control flow magic. It was prototyped with a macro, but failure handling comes up all the time in practical programming, and it's important to make it as ergonomic as possible.
- dgellow 5y agoI see. I think reading your initial comment I took issue with the hyperbole "crazy control-flow (monadic) magic is happening here". But yes it is a hidden control flow, and taking in account hidden control flows is inherently more complicated (or at least has a steeper learning curve).
- estebank 5y agoIt's more like let v = match x { Ok(o) => o, Err(e) => return Err(e.into()), }; > That feels like something that could be done with a macro. Indeed. It used to be a macro called try!.
- dgellow 5y agoAh, thanks for the correction, that's better yes