performance - 为什么选择 `unwrap_or_else` 而不是 `unwrap_or`?
问题描述
fn main() {
let _one = None.unwrap_or("one".to_string());
let _two = None.unwrap_or_else(|| "two".to_string());
}
unwrap_or_else
人们应该更喜欢的任何特殊原因unwrap_or
?
我看到了unwrap_or
急切的评论(以此为例)。这是否意味着unwrap_or
总是在程序执行之前评估中的值?并且仅当程序执行到该行时才调用其中的FnOnce
值?unwrap_or_else
解决方案
两者都在程序执行期间进行评估,并且可以是任意值。不同之处在于:
- 回退值在被调用
unwrap_or
之前被评估unwrap_or
,因此评估它是否需要(因为 Rust 是一种急切的语言)。 - 只有在触发它(通过调用您传递的函数)
unwrap_or_else
时才评估回退值unwrap_or_else
,因此仅在需要时才评估它。
推荐阅读
- c# - 如何在 SQL Server 中创建表以将电子邮件地址设置为活动/非活动
- sql-server-2016 - 更改最小事务日志文件大小
- sql - Postgres 如何触发 `AFTER UPDATE FOR EACH STATEMENT` 关联它的 `OLD TABLE` 和 `NEW TABLE`?
- windows - 在已安装程序列表中显示发布者名称
- java - 如何在没有 spring boot 和 springrest 的情况下将 Jersey 集成到 spring 5 mvc 应用程序中
- drupal - 将 Drupal 网站/服务器切换到 HTTP2 的步骤是什么
- python - 如何使用 Python xlwings 在 excel 工作簿中检测受保护的工作表?
- vue.js - Strapi 和 Nuxt/Vue 访问图像 URL
- python - 带有未知重定向 url 的 python CAS 登录门户
- javascript - Angular - ./src/app/pages/landing-page/landing-page.component.ts 中的错误