泛型

    类型参量指定为泛型要使用尖括号和 CamelCase(驼峰式命名): 。“泛型类型参量”一般用 <T> 来表示。在 Rust 中,“泛型”也表示可以接受一个或多个泛型类型参量 <T> 的任何内容。任何指定为泛型类型参量的类型都是泛型,其他的都是具体类型(非泛型)。

    因为 T 被指定为一个使用 <T> 的泛型类型参量,所以在这里用到的 (T) 会变成泛型 。即使 T 在前面被定义为 struct 也是如此。

    1. // 具体的类型 `A`。
    2. struct A;
    3. // 在定义类型 `Single` 时,在 `A` 的首次使用之前没有出现 `<A>`。
    4. // 因此,`Single` 是一个具体的类型,`A` 在上面已经定义。
    5. // (原文:In defining the type `Single`, the first use of `A` is not preceded
    6. // by `<A>`. Therefore, `Single` is a concrete type, and `A` is defined as above.)
    7. // ^ 这里是 `Single` 对类型 `A` 的第一次使用。
    8. // 此处 `<T>` 在第一次使用 `T` 前出现,所以 `SingleGen` 是一个泛型类型。
    9. // 因为类型参量 `T` 是泛型,所以它可以是任何类型,包括在上面定义的具体类型 `A`。
    10. struct SingleGen<T>(T);
    11. // `Single` 是具体类型并显式地接受 `A`。
    12. // 创建一个 `SingleGen<char>` 类型的变量 `_char`,并给一个 `SingleGen('a') 值。
    13. // 这里的 `SingleGen` 拥有显式指定的类型参量。
    14. let _char: SingleGen<char> = SingleGen('a');
    15. // `SingleGen` 也可以拥有隐式指定的类型参量:
    16. let _t = SingleGen(A); // 使用在上面定义的 `A`。
    17. let _i32 = SingleGen(6); // 使用 `i32` 类型。