如果变量..._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和索引有副作用。如果不小心计算>它们,可能会改变程序的语义。
1条答案
按热度按时间polkgigr1#
当你已经有值时,使用
*_or
而不是*_or_else
至少可以节省7个字符(_else
和||
可能更多的{}
),所以噪音更小。它还导致创建了一个更少的闭包-对于一个新的Rustacean或另一种编程语言的开发人员来说,这可能是未知的或不熟悉的语法-这是否会在性能或编译时间上产生可测量的差异,我不确定,但对于编译器和阅读代码的人来说,这肯定是更少的工作。