patternrustCritical
Why choosing `unwrap_or_else` over `unwrap_or`?
Viewed 0 times
unwrap_or_elsewhychoosingoverunwrap_or
Problem
fn main() {
let _one = None.unwrap_or("one".to_string());
let _two = None.unwrap_or_else(|| "two".to_string());
}
Any particular reason why people should prefer
unwrap_or_else over unwrap_or?I have seen comments that
unwrap_or is eager (this as an example). Does that mean the values in unwrap_or are always evaluated before program execution? And the FnOnce values in unwrap_or_else is called only when the program execute up to that line?Solution
Both are evaluated during the program's execution and can be arbitrary values. The difference is that:
- With
unwrap_orthe fallback value is evaluated just beforeunwrap_oris called, and therefore is evaluated whether it's needed or not (because Rust is an eager language).
- With
unwrap_or_elsethe fallback value is evaluated only whenunwrap_or_elsetriggers it (by invoking the function you pass), and therefore is evaluated only if it's needed.
Context
Stack Overflow Q#56726571, score: 108
Revisions (0)
No revisions yet.