我已经编写了一些解析配置文件的代码。如果配置文件包含它在 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!
总是被执行,即使从配置中读取了一个有效的 interval 值。
当 parse()
失败时,如何才能使 unwrap_or 只执行 optb
中的代码?
最佳答案
How can I make it so that
unwrap_or
only executes the code inoptb
whenparse()
has failed?
传递给
unwrap_or
的参数急切求值。如果你传递的是函数调用的结果,建议 使用
unwrap_or_else
,这是惰性求值。
在您的场景中,它应该更改如下:
let config: Config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or_else(|_| {
error!("No interval found. Using default: 90");
90
}),
}
此外,您不应在生产代码中使用裸 unwrap()
。
错误处理是更好的解决方案,而不是使用裸体 unwrap()
Here您可以找到有关为什么不应该使用 unwrap()
关于rust - 解析整数或使用 unwrap_or 提供默认值,但使用默认值时打印错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54663849/