使用unwrap_or解析整数或提供默认值,但在使用默认值时打印错误消息

问题描述 投票:2回答:1

我编写了一些解析配置文件的代码。如果配置文件包含它在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
1个回答
6
投票

我怎样才能使unwrap_oroptb失败时只执行parse()中的代码?

  • 传递给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
    }),
}

Playground


此外,您不应该在生产代码中使用裸unwrap()。错误处理是更好的解决方案,而不是使用裸unwrap()

Here你可以找到你不应该使用unwrap()的详细信息

© www.soinside.com 2019 - 2024. All rights reserved.