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

时间:2019-02-13 06:25:13

标签: rust

我已经写了一些解析配置文件的代码。如果配置文件为字段保留有效值,则会在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()中的代码?

1 个答案:

答案 0 :(得分:5)

您可以使用unwrap_or_else()来关闭它:

let my_interval = "string".parse().unwrap_or_else(|_| {
    println!("No interval found. Using default: 90");
    90
});

Playground

在您的情况下,应进行以下更改:

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()

的详细信息