Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 解析整数或使用“展开”或提供默认值,但在使用默认值时打印错误消息_Rust - Fatal编程技术网

Rust 解析整数或使用“展开”或提供默认值,但在使用默认值时打印错误消息

Rust 解析整数或使用“展开”或提供默认值,但在使用默认值时打印错误消息,rust,Rust,我已经编写了一些解析配置文件的代码。如果配置文件为它在configstruct中设置的字段保留有效值。如果未找到设置的有效整数值,则会设置默认值(例如:90) 我怎样才能使它关闭,这样它就可以通过错误打印出来并设置默认值 如下所示: let config = Config { interval: settings.get("interval").unwrap().parse().unwrap_or({ error!("No interval found. Using de

我已经编写了一些解析配置文件的代码。如果配置文件为它在
config
struct中设置的字段保留有效值。如果未找到设置的有效整数值,则会设置默认值(例如:90)

我怎样才能使它关闭,这样它就可以通过
错误打印出来并设置默认值

如下所示:

let config = Config {
    interval: settings.get("interval").unwrap().parse().unwrap_or({
        error!("No interval found. Using default: 90");
        90
    });
}
let config: Config = Config {
   interval: settings.get("interval").unwrap().parse().unwrap_or_else(|_| {
        error!("No interval found. Using default: 90");
        90
    }),
}
但是在这个例子中,
错误始终执行,即使从配置中读取了有效的间隔值

parse()
失败时,如何使unwrap\u或仅执行
optb
中的代码

parse()
失败时,如何使
unwrap\u或
仅执行
optb
中的代码

  • 传递给
    unwrap\u或
    的参数会得到热切的评估

  • 如果要传递函数调用的结果,建议这样做 使用
    unwrap\u或\u else
    这是延迟评估的

在您的场景中,应按以下方式进行更改:

let config = Config {
    interval: settings.get("interval").unwrap().parse().unwrap_or({
        error!("No interval found. Using default: 90");
        90
    });
}
let config: Config = Config {
   interval: settings.get("interval").unwrap().parse().unwrap_or_else(|_| {
        error!("No interval found. Using default: 90");
        90
    }),
}


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


您可以找到有关不应使用
unwrap()

Ahh的详细信息,非常简单。这就是我要找的。我将详细了解_or()和_or_else()函数之间的区别。我怀疑这其中的uu将是解析失败的错误?是的,确切地说,为了将答案保持在最低限度,我没有处理答案中的错误,只是用下划线将其静音。
unwrap()
的问题比“生产中不要惊慌”的问题更微妙。对相关问题的回答是一个很好的起点。我猜@Robin可能希望将缺少
“interval”
字段视为不可解析的值,在这种情况下,一种方法是
。然后(| value | value.parse().ok())
而不是
。unwrap().parse()