为什么选择“unwrap_or_else”而不是“unwrap_or”?

YLy*_*Lyu 9 performance rust unwrap

fn main() {
    let _one = None.unwrap_or("one".to_string());
    let _two = None.unwrap_or_else(|| "two".to_string());
}
Run Code Online (Sandbox Code Playgroud)

有什么特别的原因,人们应该更喜欢unwrap_or_elseunwrap_or

我看到了unwrap_or热切的评论(以这个为例)。这是否意味着unwrap_or总是在程序执行之前评估中的值?并且只有在程序执行到该行时才调用中的FnOnceunwrap_or_else

The*_*kis 19

两者都在程序执行期间进行评估,并且可以是任意值。不同之处在于:

  • 随着unwrap_or回退值之前评估unwrap_or被调用,因此无论是需要与否进行评估(因为锈病是一个热切的语言)。
  • 随着unwrap_or_else当值回退时,才会评估unwrap_or_else触发器(通过调用传递的功能),因此,仅在网络需要的时候进行评估。