我已经写了一些解析配置文件的代码。如果配置文件为字段保留有效值,则会在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
});
}
但是在此示例中,即使从配置中读取了来自interval的有效值,也始终执行error!
。
我该如何做才能使optb
失败时unwrap_or只执行parse()
中的代码?
答案 0 :(得分:5)
您可以使用unwrap_or_else()
来关闭它:
let my_interval = "string".parse().unwrap_or_else(|_| {
println!("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()
,因为在发生错误时,panics!
通常是您不希望的。
Here,您可以找到有关为什么不应该使用unwrap()