fn main() {
foo().map_err(|err| println!("{:?}", err));
}
fn foo() -> Result<(), std::io::Error> {
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
结果:
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`
Run Code Online (Sandbox Code Playgroud)
您没有处理结果,而是将结果从一种类型映射到另一种类型.
foo().map_err(|err| println!("{:?}", err));
Run Code Online (Sandbox Code Playgroud)
该行的作用是call foo(),它返回Result<(), std::io::Error>.然后map_err使用闭包返回的类型(在本例中为()),并修改错误类型并返回Result<(), ()>.这是您没有处理的结果.既然你似乎想要忽略这个结果,那么最简单的事情就是调用ok().
foo().map_err(|err| println!("{:?}", err)).ok();
Run Code Online (Sandbox Code Playgroud)
ok()转换Result<T,E>为Option<T>,将错误转换为None,您将不会收到忽略的警告.
或者:
match foo() {
Err(e) => println!("{:?}", e),
_ => ()
}
Run Code Online (Sandbox Code Playgroud)