代码之家  ›  专栏  ›  技术社区  ›  Tim Diekmann suresh madaparthi

[自动衍生的]是什么意思?

  •  3
  • Tim Diekmann suresh madaparthi  · 技术社区  · 6 年前

    我找到了 #[automatically_derived] serde-derive 生成派生类型的实现时使用板条箱:

    quote! {
        #[automatically_derived]
        impl #impl_generics _serde::Serialize for #ident #ty_generics #where_clause {
            fn serialize<__S>(&self, __serializer: __S) -> _serde::export::Result<__S::Ok, __S::Error>
            where
                __S: _serde::Serializer,
            {
                #body
            }
        }
    }
    

    这是什么意思?我什么时候用这个?

    我在几个扩展宏中也找到了这个,但找不到关于这行的任何描述。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Shepmaster Tim Diekmann    6 年前

    它向编译器指示 the marked code should not be reported as unused :

    // Don't run unused pass for #[derive()]
    if let FnKind::Method(..) = fk {
        let parent = ir.tcx.hir.get_parent(id);
        if let Some(hir::map::Node::NodeItem(i)) = ir.tcx.hir.find(parent) {
            if i.attrs.iter().any(|a| a.check_name("automatically_derived")) {
                return;
            }
        }
    }