我编写了一些解析配置文件的代码.如果配置文件包含它在Configstruct中设置的字段的有效值.如果未找到设置的有效整数值,则设置默认值(例如:90).
let config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or(90),
}
Run Code Online (Sandbox Code Playgroud)
如何让它关闭,以便它可以打印error!并设置默认值?
看起来如下:
let config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or({
error!("No interval found. Using default: 90");
90
});
}
Run Code Online (Sandbox Code Playgroud)
但在此示例中,error!即使从配置中读取了间隔中的有效值,也始终执行该操作.
我怎样才能使unwrap_or只在失败optb时执行代码parse()?
您可以使用unwrap_or哪个进入闭包:
let config: Config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or_else(|_| {
error!("No interval found. Using default: 90");
90
}),
}
Run Code Online (Sandbox Code Playgroud)
在您的方案中,应更改如下:
let config: Config = Config {
interval: settings.get("interval").unwrap().parse().unwrap_or_else(|_| {
error!("No interval found. Using default: 90");
90
}),
}
Run Code Online (Sandbox Code Playgroud)
此外,您不应该optb在生产代码中使用naked ,因为在发生错误时parse(),通常情况下您不应该这样做.
在这里,您可以找到有关您不应该使用的原因的详细信息unwrap_or
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |