泛型
类型参量指定为泛型要使用尖括号和 CamelCase(驼峰式命名): 。“泛型类型参量”一般用 <T>
来表示。在 Rust 中,“泛型”也表示可以接受一个或多个泛型类型参量 <T>
的任何内容。任何指定为泛型类型参量的类型都是泛型,其他的都是具体类型(非泛型)。
因为 T
被指定为一个使用 <T>
的泛型类型参量,所以在这里用到的 (T)
会变成泛型 。即使 T
在前面被定义为 struct
也是如此。
// 具体的类型 `A`。
struct A;
// 在定义类型 `Single` 时,在 `A` 的首次使用之前没有出现 `<A>`。
// 因此,`Single` 是一个具体的类型,`A` 在上面已经定义。
// (原文:In defining the type `Single`, the first use of `A` is not preceded
// by `<A>`. Therefore, `Single` is a concrete type, and `A` is defined as above.)
// ^ 这里是 `Single` 对类型 `A` 的第一次使用。
// 此处 `<T>` 在第一次使用 `T` 前出现,所以 `SingleGen` 是一个泛型类型。
// 因为类型参量 `T` 是泛型,所以它可以是任何类型,包括在上面定义的具体类型 `A`。
struct SingleGen<T>(T);
// `Single` 是具体类型并显式地接受 `A`。
// 创建一个 `SingleGen<char>` 类型的变量 `_char`,并给一个 `SingleGen('a') 值。
// 这里的 `SingleGen` 拥有显式指定的类型参量。
let _char: SingleGen<char> = SingleGen('a');
// `SingleGen` 也可以拥有隐式指定的类型参量:
let _t = SingleGen(A); // 使用在上面定义的 `A`。
let _i32 = SingleGen(6); // 使用 `i32` 类型。