Rust 解析整数或使用“展开”或提供默认值,但在使用默认值时打印错误消息
我已经编写了一些解析配置文件的代码。如果配置文件为它在Rust 解析整数或使用“展开”或提供默认值,但在使用默认值时打印错误消息,rust,Rust,我已经编写了一些解析配置文件的代码。如果配置文件为它在configstruct中设置的字段保留有效值。如果未找到设置的有效整数值,则会设置默认值(例如:90) 我怎样才能使它关闭,这样它就可以通过错误打印出来并设置默认值 如下所示: let config = Config { interval: settings.get("interval").unwrap().parse().unwrap_or({ error!("No interval found. Using de
config
struct中设置的字段保留有效值。如果未找到设置的有效整数值,则会设置默认值(例如:90)
我怎样才能使它关闭,这样它就可以通过错误打印出来代码>并设置默认值
如下所示:
let config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or({
error!("No interval found. Using default: 90");
90
});
}
let config: Config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or_else(|_| {
error!("No interval found. Using default: 90");
90
}),
}
但是在这个例子中,错误代码>始终执行,即使从配置中读取了有效的间隔值
当parse()
失败时,如何使unwrap\u或仅执行optb
中的代码
当parse()
失败时,如何使unwrap\u或仅执行optb
中的代码
- 传递给
unwrap\u或
的参数会得到热切的评估
- 如果要传递函数调用的结果,建议这样做
使用
unwrap\u或\u else
这是延迟评估的
在您的场景中,应按以下方式进行更改:
let config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or({
error!("No interval found. Using default: 90");
90
});
}
let config: Config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or_else(|_| {
error!("No interval found. Using default: 90");
90
}),
}
另外,您不应该在生产代码中使用裸unwrap()
。
错误处理是更好的解决方案,而不是使用裸unwrap()
您可以找到有关不应使用unwrap()
Ahh的详细信息,非常简单。这就是我要找的。我将详细了解_or()和_or_else()函数之间的区别。我怀疑这其中的uu将是解析失败的错误?是的,确切地说,为了将答案保持在最低限度,我没有处理答案中的错误,只是用下划线将其静音。unwrap()
的问题比“生产中不要惊慌”的问题更微妙。对相关问题的回答是一个很好的起点。我猜@Robin可能希望将缺少“interval”
字段视为不可解析的值,在这种情况下,一种方法是。然后(| value | value.parse().ok())
而不是。unwrap().parse()
。