Why am I getting "unused Result which must be used ... Result may be an Err variant, which should be handled" even though I am handling it?
12,294
You're not handling the result, you're mapping the result from one type to another.
foo().map_err(|err| println!("{:?}", err));
What that line does is call foo()
, which returns Result<(), std::io::Error>
. Then map_err
uses the type returned by your closure (in this case, ()
), and modifies the error type and returns Result<(), ()>
. This is the result that you are not handling. Since you seem to want to just ignore this result, the simplest thing to do would probably be to call ok()
.
foo().map_err(|err| println!("{:?}", err)).ok();
ok()
converts Result<T,E>
to Option<T>
, converting errors to None
, which you won't get a warning for ignoring.
Alternatively:
match foo() {
Err(e) => println!("{:?}", e),
_ => ()
}
Related videos on Youtube

Author by
marathon
Updated on June 13, 2022Comments
-
marathon 6 months
fn main() { foo().map_err(|err| println!("{:?}", err)); } fn foo() -> Result<(), std::io::Error> { Ok(()) }
results:
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`
-
Sebastian Redl about 4 yearsYou are "handling" the error returned by
foo()
, but not the error returned bymap_err(...)
.
-
-
Jmb about 4 years