fn main() {
foo().map_err(|err| println!("{:?}", err));
}
fn foo() -> Result<(), std::io::Error> {
Ok(())
}
结果:
warning: unused `std::result::Result` that must be used
--> src/main.rs:2:5
|
2 | foo().map_err(|err| println!("{:?}", err));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[warn(unused_must_use)] on by default
= note: this `Result` may be an `Err` variant, which should be handled
Finished dev [unoptimized + debuginfo] target(s) in 0.58s
Running `target/debug/playground`
答案 0 :(得分:6)
您不处理结果,而是将结果从一种类型映射到另一种类型。
foo().map_err(|err| println!("{:?}", err));
该行的作用是调用foo()
,它返回Result<(), std::io::Error>
。然后map_err
使用闭包返回的类型(在这种情况下为()
),并修改错误类型并返回Result<(), ()>
。这是您未处理的结果。由于您似乎只想忽略此结果,因此最简单的操作可能是调用ok()
。
foo().map_err(|err| println!("{:?}", err)).ok();
ok()
将Result<T,E>
转换为Option<T>
,将错误转换为None
,您不会因忽略而得到警告。
或者:
match foo() {
Err(e) => println!("{:?}", e),
_ => ()
}