如果变量..._or_else()executed only when it's needed

// example
let value = option.unwrap_or_else(|| compute_value(argument));
// only executed if `option` is of enum variant Option::None

那有没有..._or()有优势的情况呢?

I understand that,如果..._or_else()内部的结果已经计算过,则可以使用..._or()而不会有任何缺陷.但在这种情况下有什么优势吗?

我试过了,找到了建议从..._or_else()改为..._or()的快速规则,但我很难理解this rule的原因:

为什么这很糟糕?

在某些情况下,使用Eager 求值更短、更简单.

已知问题

Deref和Index有可能有副作用,但不推荐使用.热切地判断>它们可以改变程序的语义.

推荐答案

当您已经有了该值时,使用*_or而不是*_or_else可以节省至少7个字符(_else||可能比 {}多),因此噪音更小.

它还导致创建更少的闭包-对于新Rustacean或另一种编程语言的开发人员来说,这可能是未知或不熟悉的语法-这是否会在性能或编译时间方面产生可测量的差异我不确定,但对于编译器和阅读代码的人来说,这肯定是更少的工作.

Rust相关问答推荐

在‘await’点上使用‘std::同步::Mutex’是否总是会导致僵局?

阻止websocket中断的中断中断的终端(操作系统错误4)

将此字符串转换为由空格字符分隔的空格

如何在tauri—leptos应用程序中监听后端值的变化?""

把Vector3变成Vector4的绝妙方法

borrow 和内部IntoIterator

从特征实现调用函数的Rust惯用方法

在特征中使用Async时,如何解决不透明类型`impl Future<;out=self>;`不满足其关联的类型边界和警告?

如何格式化传入Rust中mysql crate的Pool::new的字符串

完全匹配包含大小写的整数范围(&Q;)

我应该如何表达具有生命周期参数的类型的总排序,同时允许与不同生命周期进行比较?

仅发布工作区的二进制 crate

Rust 为什么被视为borrow ?

使用在功能标志后面导入的类型,即使未启用功能标志

如何在 Rust 中将枚举变体转换为 u8?

使用自定义 struct 收集 Vec

为什么在 rust 中删除 vec 之前应该删除元素

在 Rust 中返回对枚举变体的引用是个好主意吗?

在单独的线程上运行 actix web 服务器

为什么 Rust 标准库同时为 Thing 和 &Thing 实现特征?