[Rust]泛型

2020-01-16  本文已影响0人  Tsun424

泛型允许在程序中包含使用调用(实例化)时才确定的类型,这样就可以将不同类型具有相同功能的代码抽象在一个方法中。

结构体和枚举中的泛型

标准库中的泛型

enum Option<T> {
    Some(T),
    None,
}

泛型可以有默认值,如下实例化Default时如果不指定T的类型,那它就是i32类型,否则通过::<>指定类型。

struct Default<T=i32> {
    value: T
}

fn main() {
    let v1 = Default { value: 0};
    let v2 = Default::<bool> { value: false};
    println!("{} {}", v1.value, v2.value);
}

函数中的泛型

fn test<T: std::fmt::Display> (a: T) {
    println!("{}", a);
}


fn main() {
    test(1)
}

如果需要多个类型参数,则需要多个泛型。

fn test<T1: std::fmt::Display, T2: std::fmt::Display> (a: T1, b: T2) {
    println!("{}", a);
    println!("{}", b);
}


fn main() {
    test(1, 2.0f32)
}

impl中的泛型

impl的时候也可以使用泛型。在impl<Trait>for<Type>{}这个语法结构中,泛型类型既可以出现在<Trait>位置,也可以出现在<Type>位置。

上一篇 下一篇

猜你喜欢

热点阅读