(Jin Qing's Column, Apr., 2022)
This code compiles error:
trait MyCallback: FnMut(&u32) -> () { } impl<F: FnMut(&u32) -> ()> MyCallback for F { } fn process_data(mut f: impl MyCallback) -> () { f(&0) } fn process_data_2(mut f: impl FnMut(&u32) -> ()) -> () { f(&0) } fn main() { // Doesn't compile process_data(|_| ()); // Compiles process_data_2(|_| ()); }
expected type `for<'r> FnMut<(&'r u32,)>` found type `FnMut<(&u32,)>`
Fix:
process_data(|_: &_| ());
See: https://stackoverflow.com/questions/61671460/rust-type-mismatch-resolving-forr-with-closure-trait-alias-argument
Also see: https://github.com/rust-lang/rust/issues/58639
Sometimes, Rust needs a type annotation in closure.
Powered by: C++博客 Copyright © 金慶