4 ms·
It’s still useful in cases where you’ve already handled the error case. For example: if res.is_err() { // Do something return; } let res = res.u
by Cyph0n 4y ago
It’s still useful in cases where you’ve already handled the error case. For example:
if res.is_err() {
// Do something
return;
}
let res = res.unwrap();
- JoshMcguigan 4y agoYou can replace this with a match statement to avoid the unwrap.
- Macha 4y agoIt does introduce another layer of nesting in the code, which can be undesirable from a readability perspective at times
- johntb86 4y agoRust is getting let-else to solve that problem: https://rust-lang.github.io/rfcs/3137-let-else.html https://rust-lang.github.io/rfcs/3137-let-else.html
- kannanvijayan 4y agoNot necessarily, you can extract the inner type by using the match as an expression, e.g.: ``` let val = match res { Err(e) => { ... return ...; } Ok(v) => v, }; // Use val without unwrapping here. ``` That said, even though I'd avoid unwrap in this particular case in my code, I generally disagree with the author. Taking out unwrap and leaving in expect would simply lead to a bunch of code that goes `let val = result.expect("!");`, which is equivalently bad when held up against the criticisms the author makes of unwrap. Unwrap isn't really harmful so much as a symptom and an escape valve around the fact that our type systems really aren't powerful enough to derive all the invariants the programmer can about their code.
- deleted 4y ago[deleted]
- mrits 4y agoI'd use a 'if let' for something so short.
- Cyph0n 4y agoOf course, but I think this approach signals intent a bit more clearly: we want to get error handling out of the way and then just proceed with the happy path. It’s also a tad less verbose.
- throwaway234232 4y agoThis is a good use case for let-else, however I won't agree with you here on usage of unwrap for the sake of brevity. I will opt for `?` or match instead.