特性 trait

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

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

参见:

Drop, struct, 和 trait