首页 > 解决方案 > 解析整数或使用 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()

标签: rust

解决方案


我怎样才能使它只在失败时unwrap_or执行代码?optbparse()

  • 传递给的参数unwrap_or热切地评估

  • 如果要传递函数调用的结果,建议使用unwrap_or_elsewhich 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()


推荐阅读