在什么情况下 `..._or()` 比 `..._or_else(|| {})` 更好,为什么?

问题描述 投票:0回答:1

如果变体

..._or_else()
仅在需要时执行

// example let value = option.unwrap_or_else(|| compute_value(argument)); // only executed if `option` is of enum variant Option::None
那么有没有什么情况

..._or()

有优势呢?

明白了,如果..._or_else()

里面的结果已经计算出来了,那么使用
..._or()
就可以毫无缺点地使用了。但这种情况有什么好处吗?

我尝试过情况,发现了建议从

..._or_else()

更改为
..._or()
的剪辑规则,我很难理解
这个规则的原因:

为什么会这样?

在某些情况下,使用即时求值会更短、更简单。

已知问题

Deref 和 Index 有可能产生副作用,但不建议这样做。热切地评估>它们可以改变程序的语义。

rust lazy-evaluation rust-clippy
1个回答
0
投票
当您已有值时,使用

*_or

 代替 
*_or_else
 可以节省至少 7 个字符(
_else
||
 可能更多 
{}
),因此噪音更少。它还会导致创建的闭包减少 1 个,我不确定这是否会在性能或编译时间上产生可测量的差异,但对于编译器和阅读代码的人来说,这肯定会减少工作量。

© www.soinside.com 2019 - 2024. All rights reserved.