泛型

    例如定义一个名为 foo泛型函数,它可接受类型为 T 的任何参数 arg

    下面例子展示了泛型语法的使用:

    1. // 一个具体类型 `A`。
    2. struct A;
    3. // 在定义类型 `Single` 时,第一次使用类型 `A` 之前没有写 `<A>`。
    4. // 因此,`Single` 是个具体类型,`A` 取上面的定义。
    5. struct Single(A);
    6. // ^ 这里是 `Single` 对类型 `A` 的第一次使用。
    7. // 此处 `<T>` 在第一次使用 `T` 前出现,所以 `SingleGen` 是一个泛型类型。
    8. // 因为 `T` 是泛型的,所以它可以是任何类型,包括在上面定义的具体类型 `A`。
    9. struct SingleGen<T>(T);
    10. fn main() {
    11. // `Single` 是具体类型,并且显式地使用类型 `A`。
    12. let _s = Single(A);
    13. // 这里的 `SingleGen` 的类型参数是显式指定的。
    14. let _char: SingleGen<char> = SingleGen('a');
    15. // `SingleGen` 的类型参数也可以隐式地指定。
    16. let _t = SingleGen(A); // 使用在上面定义的 `A`。
    17. let _i32 = SingleGen(6); // 使用 `i32` 类型。
    18. let _char = SingleGen('a'); // 使用 `char`。
    19. }