为什么选择`unwrap_or`而不是`unwrap_or_else`?

时间:2019-06-23 18:07:46

标签: performance rust unwrap

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

人们为什么更喜欢unwrap_or_elseunwrap_or的某些特殊原因?

我已经看到unwrap_or迫切的评论(例如this)。这是否意味着unwrap_or中的值总是在程序执行之前进行评估?并且只有在程序执行到该行时才调用FnOnce中的unwrap_or_else值吗?

1 个答案:

答案 0 :(得分:3)

两者均在程序执行期间求值,并且可以是任意值。区别在于:

  • 使用unwrap_or会在调用unwrap_or之前评估后备值,因此会评估是否需要此值(因为Rust是一种急切的语言)。
  • 使用unwrap_or_else时,仅当unwrap_or_else触发后备值时(通过调用传递的函数)才评估后备值,因此仅在需要时才评估后备值。