【发布时间】:2019-06-23 18:07:46
【问题描述】:
fn main() {
let _one = None.unwrap_or("one".to_string());
let _two = None.unwrap_or_else(|| "two".to_string());
}
人们应该更喜欢unwrap_or_else 而不是unwrap_or 的任何特定原因?
我见过unwrap_or 渴望的cmets(以this 为例)。这是否意味着unwrap_or 中的值总是在程序执行之前进行评估?而unwrap_or_else 中的FnOnce 值只有在程序执行到该行时才被调用?
【问题讨论】:
-
这是一个调用,所以参数总是被评估。
unwrap_or_else的文档也说了这么多。 -
为什么布尔条件句使用
||而不是|?它们都可以工作,但||具有明显的优势。 -
@SilvioMayolo 是称为
FnOnce的闭包,不是布尔值? doc.rust-lang.org/std/option/… -
@Jason 抱歉,如果我的评论不清楚。我并不是在暗示上面代码中的
||是一个布尔值或。我的意思是在|, ||和unwrap_or和unwrap_or_else之间的关系之间进行类比。即两对中的后者短路。 -
@Jason 没错!听起来你做对了。
标签: performance rust unwrap