衍生

derive 属性 允许自动生成数据结构的新 条目 。 它使用 元列表路径组 语法来指定要实现的一组 trait 或要处理的 衍生宏 的路径。

例如,以下代码将为 Foo 创建一个 impl 条目 ,实现 PartialEqClone 两个 trait , 而类型参数 T 将被赋予相应 impl 中的 PartialEqClone 约束。

#![allow(unused)]
fn main() {
#[derive(PartialEq, Clone)]
struct Foo<T> {
    a: i32,
    b: T,
}
}

对于 PartialEq 所生成的 impl 等同于

#![allow(unused)]
fn main() {
struct Foo<T> { a: i32, b: T }
impl<T: PartialEq> PartialEq for Foo<T> {
    fn eq(&self, other: &Foo<T>) -> bool {
        self.a == other.a && self.b == other.b
    }
}
}

你可以通过 过程宏 为你自己的 trait 实现 derive

automatically_derived 属性

自动生成的实现由 derive 属性自动添加了 automatically_derived 属性,它本身没有直接作用,但是可以被工具和代码分析诊断用来检测这些自动生成的实现。