Derive

derive 属性允许为数据结构自动生成新的 。它使用 MetaListPaths 语法来指定要实现的特征列表或要处理的 派生宏 的路径。

例如,以下代码将为 Foo 创建 impl,用于实现 PartialEqClone 特征,并且类型参数 T 将根据相应的 impl 被赋予 PartialEqClone 约束。

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

生成的 PartialEqimpl 等效于:

#![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
    }
}
}

您可以通过 过程宏 为您自己的特征实现 derive

automatically_derived 属性

automatically_derived 属性会自动添加到由 derive 属性为内置特征创建的 实现 中。它没有直接效果,但可以被工具和诊断提示用于检测这些自动生成的实现。