如果变体
..._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 有可能产生副作用,但不建议这样做。热切地评估>它们可以改变程序的语义。
*_or
代替
*_or_else
可以节省至少 7 个字符(
_else
和
||
可能更多
{}
),因此噪音更少。它还会导致创建的闭包减少 1 个,我不确定这是否会在性能或编译时间上产生可测量的差异,但对于编译器和阅读代码的人来说,这肯定会减少工作量。