rust - 解析整数或使用 unwrap_or 提供默认值,但在使用默认值时打印错误消息
问题描述
我写了一些解析配置文件的代码。Config
如果配置文件包含它在结构中设置的字段的有效值。如果没有为某个设置找到有效的整数值,它会设置一个默认值(例如:90)。
let config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or(90),
}
我怎样才能让它关闭,以便它可以通过打印error!
并设置默认值?
看起来像以下内容:
let config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or({
error!("No interval found. Using default: 90");
90
});
}
但是在这个例子中,error!
总是执行,即使从配置中读取了一个有效的间隔值。
如何使 unwrap_or 仅在失败optb
时执行代码parse()
?
解决方案
我怎样才能使它只在失败时
unwrap_or
执行代码?optb
parse()
传递给的参数
unwrap_or
被热切地评估。如果要传递函数调用的结果,建议使用
unwrap_or_else
which is lazily evaluate。
在您的场景中,它应该更改如下:
let config: Config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or_else(|_| {
error!("No interval found. Using default: 90");
90
}),
}
此外,您不应unwrap()
在生产代码中使用裸机。错误处理是更好的解决方案,而不是使用裸unwrap()
在这里您可以找到有关为什么不应该使用的详细信息unwrap()
推荐阅读
- google-apps-script - 如何将特定单元格导出到 Google 表格中的文本文件
- perl - Perl - 对多维数组进行排序
- hibernate - Hibernate cfg 文件不考虑“密码”属性中的特殊字符
- mockito - 寻找检查 Drools 与 Facts 交互的方法
- c++ - 带有 std::function 的“潜在内存泄漏”
- python - ' ValueError: to_quantize 只能是 tf.keras 顺序模型或函数模型
- solr - Solr8.8 代数在每次索引后呈指数增长
- python - 熊猫过滤器行空和
- pandas - Pandas Merge():从合并列中附加数据并替换空值(来自问题的扩展 https://stackoverflow.com/questions/68471939)
- javascript - 如何从 POST 数据响应中检索子字符串?JS