rust 在什么情况下`..._or()`比`..._or_else(||“为什么?”

wkyowqbh  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(135)

如果变量..._or_else()仅在需要时执行

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

那么在什么情况下..._or()有优势呢?
understand that,如果..._or_else()里面的结果已经计算出来了,那么使用..._or()就可以毫无缺点的使用了。但这种情况有什么好处吗?
我试过这种情况,发现了一个Clippy规则,建议从..._or_else()改为..._or(),我很难理解这个规则的原因:

为什么不好?

在某些情况下,使用急切评估更短更简单。

已知问题

这是可能的,但不建议Deref和索引有副作用。如果不小心计算>它们,可能会改变程序的语义。

polkgigr

polkgigr1#

当你已经有值时,使用*_or而不是*_or_else至少可以节省7个字符(_else||可能更多的{}),所以噪音更小。
它还导致创建了一个更少的闭包-对于一个新的Rustacean或另一种编程语言的开发人员来说,这可能是未知的或不熟悉的语法-这是否会在性能或编译时间上产生可测量的差异,我不确定,但对于编译器和阅读代码的人来说,这肯定是更少的工作。

相关问题