Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/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
Error handling 有条件地作用于特定的错误,然后使用_Error Handling_Rust_Combinators - Fatal编程技术网

Error handling 有条件地作用于特定的错误,然后使用

Error handling 有条件地作用于特定的错误,然后使用,error-handling,rust,combinators,Error Handling,Rust,Combinators,如何知道通过进行管道结果s,然后生锈时发生了什么错误?例如,使用嵌套匹配,我可以执行以下操作: 使用std::num::parseinteror; fn get_num(n:u8)->结果{ //强制解释器 “foo.parse() } fn添加一个(n:u8)->结果{ 正常(n+1) } fn main(){ 匹配获取数量(1){ Ok(n)=>{ 匹配添加一(n){ Ok(n)=>println!(“添加一个就得到:{}”,n), Err(why)=>println!(“错误添加:{}”,

如何知道通过
进行管道
结果
s,然后
生锈时发生了什么错误?例如,使用嵌套匹配,我可以执行以下操作:

使用std::num::parseinteror;
fn get_num(n:u8)->结果{
//强制解释器
“foo.parse()
}
fn添加一个(n:u8)->结果{
正常(n+1)
}
fn main(){
匹配获取数量(1){
Ok(n)=>{
匹配添加一(n){
Ok(n)=>println!(“添加一个就得到:{}”,n),
Err(why)=>println!(“错误添加:{}”,why)
}
},
Err(why)=>println!(“获取编号时出错:{}”,why),
}
}
或者我可以使用
和_then
将第一个函数的结果传递到第二个函数,并避免嵌套匹配:

match get_num(1)。然后(添加一个){
Ok(n)=>println!(“添加一个就得到:{}”,n),
Err(why)=>println!(“某些错误:{},why)
}

如何使用
和_then
,有条件地、惯用地确定第二种形式的错误?我必须输入检查错误吗?当然,我可以像上面那样显示错误,但假设我想在它前面加上一些与错误类型相关的内容?

通常的方法是使用
map\u err
将初始错误转换为您可以控制的更丰富的内容,例如

enum MyError{
解析,
添加
}
get_num(1).map_err(| | MyError::Parsing)
。然后(| v |添加一(v)。映射错误(| | MyError::Adding)
可悲的是,正如您所看到的,这需要对
和_then
回调使用lambda:
和_then
必须返回与输入相同的错误类型,因此这里它必须生成
结果
,wjhich不是
add\u one
的返回类型


而在其他情况下,我们可以使用
进行某种程度的恢复,在这里,相同的原始错误类型被分为两个不同的值。

通常的方法是使用
map\u err
将初始错误转换为您控制的更丰富的内容,例如

enum MyError{
解析,
添加
}
get_num(1).map_err(| | MyError::Parsing)
。然后(| v |添加一(v)。映射错误(| | MyError::Adding)
可悲的是,正如您所看到的,这需要对
和_then
回调使用lambda:
和_then
必须返回与输入相同的错误类型,因此这里它必须生成
结果
,wjhich不是
add\u one
的返回类型


在其他情况下,我们可以使用
进行某种程度的恢复,但在这里,相同的原始错误类型被分为两个不同的值。

我明白了。我想这无疑比嵌套匹配更具可读性。@Aaron IMO,
和_然后
通常在我们不关心错误发生的确切位置时使用。通常是错误我知道了。我想这肯定比嵌套匹配更具可读性。@Aaron IMO,
和_然后
通常在我们不关心错误发生的确切位置时使用。通常错误应该支持漂亮打印,所以我们可以依靠它来报告错误叮叮声。