performance - 为什么选择 `unwrap_or_else` 而不是 `unwrap_or` ?

标签 performance rust unwrap

<分区>

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 很急切(例如 this)。这是否意味着 unwrap_or 中的值总是在程序执行之前计算?而 unwrap_or_else 中的 FnOnce 值仅在程序执行到该行时才被调用?

最佳答案

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

  • 使用 unwrap_or 后备值会在调用 unwrap_or 之前进行评估,因此会评估是否需要(因为 Rust 是一种急切的语言)。<
  • 使用 unwrap_or_else 后备值仅在 unwrap_or_else 触发它时(通过调用您传递的函数)进行评估,因此仅在需要时进行评估。

关于performance - 为什么选择 `unwrap_or_else` 而不是 `unwrap_or` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56726571/

相关文章:

rust - cargo 是否有能力检测源变化?

Scala:访问 optional 对象中的 optional 值

快速展开多个可选

ios - 即使我设置了 `numberOfLines = 0`,UILabel 也不换行

java - 分析 jHiccup 延迟。 57us 打嗝的来源

c# - 使用 C# 驱动程序的 MongoDB 性能较慢,而不是在命令行中

Java GC高,如何找出哪些对象被GC了

node.js - react : Importing modules with object destructuring, 还是单独 react ?

rust - actix_web 将配置传递给处理程序

rust - Index 和 IndexMut 实现返回借用的向量