首页 > 解决方案 > 为什么选择 `unwrap_or_else` 而不是 `unwrap_or`?

问题描述

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急切的评论(以此为例)。这是否意味着unwrap_or总是在程序执行之前评估中的值?并且仅当程序执行到该行时才调用其中的FnOnce值?unwrap_or_else

标签: performancerustunwrap

解决方案


两者都在程序执行期间进行评估,并且可以是任意值。不同之处在于:

  • 回退值在被调用unwrap_or之前被评估unwrap_or,因此评估它是否需要(因为 Rust 是一种急切的语言)。
  • 只有在触发它(通过调用您传递的函数)unwrap_or_else时才评估回退值unwrap_or_else,因此仅在需要时才评估它。

推荐阅读