trait
当然 trait 也可以是泛型的。我们在这里定义了一个 trait,它把 Drop trait
作为泛型方法实现了,可以 drop(丢弃)调用者本身和一个输入参数。
// 不可复制的类型。struct Empty;struct Null;// `T` 的泛型 trait。trait DoubleDrop<T> {// 定义一个调用者的方法,接受一个额外的参数 `T`,但不对它做任何事。fn double_drop(self, _: T);}// 对泛型的调用者类型 `U` 和任何泛型类型 `T` 实现 `DoubleDrop<T>` 。impl<T, U> DoubleDrop<T> for U {// 此方法获得两个传入参数的所有权,并释放它们。fn double_drop(self, _: T) {}}fn main() {let empty = Empty;let null = Null;// 释放 `empty` 和 `null`。empty.double_drop(null);//empty;//null;// ^ 试一试:去掉这两行的注释。}
