gpt4 book ai didi

rust - 结果和选项展开

转载 作者:行者123 更新时间:2023-12-03 11:25:52 25 4
gpt4 key购买 nike

我正在尝试学习 Rust,我想了解概念基础。在 Rust 中,我们经常使用 Result<T, E>作为返回类型。基本上,一个类型,它包括 - Ok()Err() , 并由调用者来处理这些。

但令我感到惊讶的是,Ok()Err() ,再次拥有他们的“选项”->即SomeNone .

示例代码:

fn integer_divide(a: u32, b: u32) -> Result<u32, String> {
if b != 0 {
Ok(a / b)
} else {
Err("Division by zero!".into())
}
}

let result = integer_divide(5, 0);

if(result.is_err()){
if(result.err().is_some()){
// some logic
}
}

问题

所以基本上,我们需要在得到每个函数的结果值之前仔细检查(首先是 ErrOk ,然后是 SomeNone )?如果是的话,我觉得这很笨拙。特别是万一我的integer_divide函数,我可以肯定地说,它永远不会有 Err() 的结果的 None值(value)。

如果我们打开 Err() 的包装,对我来说会更有意义。 ,然后检查它的值是否为None或其他类型...尤其是在我 100% 确定的情况下,它不能容纳 None值(value)。任何想法表示赞赏。

注意

我知道 ? 的存在运算符(operator)。我只是想了解概念。

最佳答案

考虑到 result.err()独自一人,没有什么能确保result实际上包含一个错误,因此这个方法不能在我们每次调用它时返回一个错误。Rust 中提供可选内容的常用方法是返回 Option ,因此 is_some()方法。这并不意味着 Result包含这样一个 Option ;这个Optionerr() 创建以防万一的方法result不包含错误。知道result里面其实有错误因为您之前使用 result.is_err() 进行了测试;但是 err() 的设计者很久以前,方法不知道会测试is_err()就在调用 err() 之前.

处理 result 的常用方法没有双重检查将是

    match result {
Ok(v) => {
println!("result is {}", v);
}
Err(e) => {
println!("error: {}", e);
}
}

关于rust - 结果和选项展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64088267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com