Rust 结果和选项展开

Rust 结果和选项展开,rust,Rust,我试图学习生锈,我想了解概念的基本原理。在Rust中,我们经常使用Result作为返回类型。基本上是一个类型,由-Ok()和Err()组成,由调用方来处理这些 但我有点惊讶的是,这两个Ok()和Err()都有它们的“选项”->,即一些和没有 示例代码: fn整数除以(a:u32,b:u32)->结果{ 如果b!=0{ 好的(a/b) }否则{ Err(“除零!”.into()) } } 让结果=整数除以(5,0); if(result.is_err()){ if(result.err().is

我试图学习生锈,我想了解概念的基本原理。在Rust中,我们经常使用
Result
作为返回类型。基本上是一个类型,由-
Ok()
Err()
组成,由调用方来处理这些

但我有点惊讶的是,这两个
Ok()
Err()
都有它们的“选项”->,即
一些
没有

示例代码:
fn整数除以(a:u32,b:u32)->结果{
如果b!=0{
好的(a/b)
}否则{
Err(“除零!”.into())
}
} 
让结果=整数除以(5,0);
if(result.is_err()){
if(result.err().is_some()){
//一些逻辑
}
}
问题: 因此,基本上,我们需要在得到每个函数的结果值之前进行双重检查(首先检查
Err
Ok
,然后检查
部分
)?如果是的话,我觉得这个很笨重。特别是在我的
integer\u divide
函数中,我可以可靠地说,它永远不会有
Err()
None
值的结果

如果我们打开
Err()
,然后检查它的值是
None
还是其他类型,这对我来说更有意义。。。特别是在我100%确定的情况下,它不能保持
None
值。任何想法都值得赞赏


我知道存在
运算符。我只想理解这个概念。

仅考虑
result.err()
,没有任何东西可以确保
result
实际包含错误,因此此方法不能在每次调用时都返回错误。 Rust中提供可选内容的常用方法是返回一个
选项
,因此
是some()
方法。 这并不意味着
结果
包含这样一个
选项
;此
选项
err()
方法创建,以防
结果
不包含错误。 知道
结果中实际上有一个错误
,因为您之前使用
结果进行了测试。is_err()
;但是
err()
方法的设计者很久以前还不知道,在调用
err()
之前,您将测试
is\u err()

处理
结果
而不进行双重检查的通常方法是

匹配结果{
Ok(v)=>{
println!(“结果为{}”,v);
}
错误(e)=>{
println!(“错误:{}”,e);
}
}
is_err()
用于回答问题“此结果是否包含错误?”。如果这就是你感兴趣的全部,那么你就可以走了:

if result.is_err() {
    // logic here
}
Result
只是一个带有两个定义良好的变量的枚举,因此如果您还需要访问错误值,可以使用
if let
匹配
Err
变量:

if let Err(e) = result {
   // logic here, `e` contains the error value
}

最后,如果您需要同时处理
Ok
Err
,请使用
match
,如@prog fh的答案所示。

Result
Option
都是枚举。看见
if let Err(e) = result {
   // logic here, `e` contains the error value
}