衍生
derive
属性 允许自动生成数据结构的新 条目 。
它使用 元列表路径组 语法来指定要实现的一组 trait 或要处理的 衍生宏 的路径。
例如,以下代码将为 Foo
创建一个 impl
条目 ,实现 PartialEq
和 Clone
两个 trait ,
而类型参数 T
将被赋予相应 impl
中的 PartialEq
或 Clone
约束。
#![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
属性,它本身没有直接作用,但是可以被工具和代码分析诊断用来检测这些自动生成的实现。