IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Rust sometimes needs manual type annotation

    金庆发表于 2022-04-29 02:14:00
    love 0

    Rust sometimes needs manual type annotation

    (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.



    金庆 2022-04-29 10:14 发表评论


沪ICP备19023445号-2号
友情链接