Derive: 自动继承常见的 trait
上文介绍了如何定义和实现 trait, 但对于一些常用的 traits, 比如 Debug
, Default
, Clone
等,
这些 traits 的行为都很单一, 手动编写的代码几乎一样, 如果每个新的类型都要手动实现一次, 比较烦琐,
Rust 提供了 #[derive(Trait)]
属性标记, 由编译器自动帮我们实现这些常用的 traits.
比如下面的 Point
结构体:
#![allow(unused)] fn main() { /// `Vector2D` provides an alternative name for `Point`. /// /// `Vector2D` and `Point` can be used interchangeably for all purposes. pub type Vector2D = Point; #[derive(Debug, Default, Clone, Copy, PartialEq)] pub struct Point { x: f32, y: f32, } }
或者 Side
枚举类:
#![allow(unused)] fn main() { #[derive(Debug, Default, Clone, Copy, PartialEq, Eq)] pub enum Side { #[default] Top, Right, Bottom, Left, } }
继承宏 Derive macro
除了标准库中预定义好的可直接继承的 traits 之外, 我们也可以对其进行扩展, 这部分涉及到了过程宏, 我们在继承宏 这一节有详细的介绍.