trait

当然 trait 也可以是泛型的。我们在这里定义了一个 trait,它把 Drop trait 作为泛型方法实现了,可以 drop(丢弃)调用者本身和一个输入参数。

  1. // 不可复制的类型。
  2. struct Empty;
  3. struct Null;
  4. // `T` 的泛型 trait。
  5. trait DoubleDrop<T> {
  6. // 定义一个调用者的方法,接受一个额外的参数 `T`,但不对它做任何事。
  7. fn double_drop(self, _: T);
  8. }
  9. // 对泛型的调用者类型 `U` 和任何泛型类型 `T` 实现 `DoubleDrop<T>` 。
  10. impl<T, U> DoubleDrop<T> for U {
  11. // 此方法获得两个传入参数的所有权,并释放它们。
  12. fn double_drop(self, _: T) {}
  13. }
  14. fn main() {
  15. let empty = Empty;
  16. let null = Null;
  17. // 释放 `empty` 和 `null`。
  18. empty.double_drop(null);
  19. //empty;
  20. //null;
  21. // ^ 试一试:去掉这两行的注释。
  22. }

参见:

Drop, struct, 和 trait