Вы не обрабатываете результат, вы отображаете результат из одного типа в другой.
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),
_ => ()
}