从Result
开始,我想对它运行一个副作用,如果它是Err
(比如记录错误)并返回错误,那么最常用的方法是什么?
我可以这样做:
fn do_something() -> Result<(), MyError> {...}
fn foo() -> Result<(), MyError> {
do_something()
.map_err(|err| {
println!("Got error in Foo: {:#?}", err);
err
})?;
...
}
但我不太喜欢这样,因为这感觉像是滥用了map_xxx
:我在map...
函数上做了一个副作用,我甚至没有将错误映射到其他东西上.
我想这会使副作用更加明显:
let result = do_something();
if let Err(err) = result {
println!("Got error in Foo: {:#?}", err);
return Err(err);
}
...
但我觉得这太冗长了.理想情况下,我会期待着像这样的东西
do_something()
.if_err(|err| {println!("Got error in Foo: {:#?}", err);})?;