Rust 的泛型

Rust 的泛型

Rust 中的泛型通过如下方式实现:

泛型函数

fn foo<T, U>(x: T, y: U) {
}

泛型枚举

enum Result<T, E> {
    Ok(T),
    Err(E), 
}

泛型结构体

struct Point<T> {
    x: T,
    y: T, 
}

impl<T> Point<T> // 在 impl 代码段开头声明泛型
where
    T: std::ops::Add<Output = T> + std::ops::Mul<Output = T> + Copy,
{
    fn distance_from_origin(&self) -> T {
        self.x * self.x + self.y * self.y
    }
}

Option 和 Result 类型

Rust 提供了两个非常方便的枚举类型:OptionResult

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

enum Result<T,E> {
    Ok(T),
    Err(E),
}

合理地运用这两个枚举类型,可以便捷地传递参数、捕获错误。

fn eat(food: Option<String>) {
    match food {
        Some(c) => println!("Nice {}! I'm full.",c),
        None => println!("Nothing to eat. I'm hungry!"),
    }
}

fn divide(a: i32, b: i32) -> Result<i32, String>{
    if b == 0 {
        return Err(String::from("Division by zero"));
    }

    Ok(a / b)
}