Rust 标准库有 Min/Max 特性吗?

Hos*_*nan 3 rust

我想T用它的最小值初始化一个类型的变量,比如T::min(). 在 Rust 1.40.0 中可以不需要外部依赖吗?

另一种方法是将变量设置为None,但这会在None每次我想增加变量时引入检查开销。

Sir*_*ius 6

标准库中没有这样的特性。

但是,如果您愿意为您感兴趣的类型创建适当的特征并实现它们,则可以为没有外部依赖关系的任意类型使用 min 和 max 的通用概念,例如:

use core::fmt::Display;

trait Min {
    fn min() -> Self;
}

trait Max {
    fn max() -> Self;
}

impl Min for u8 {
    fn min() -> u8 {
        std::u8::MIN
    }
}

impl Max for u8 {
    fn max() -> u8 {
        std::u8::MAX
    }
}

impl Min for i32 {
    fn min() -> i32 {
        std::i32::MIN
    }
}

impl Max for i32 {
    fn max() -> i32 {
        std::i32::MAX
    }
}

fn print_min_max<T: Min + Max + Display>() {
    println!("{} -> {}", T::min(), T::max());
}

fn main() {
    let m: i32 = Min::min();
    println!("{}", m);

    print_min_max::<u8>();
    print_min_max::<i32>();
}
Run Code Online (Sandbox Code Playgroud)

这打印:

use core::fmt::Display;

trait Min {
    fn min() -> Self;
}

trait Max {
    fn max() -> Self;
}

impl Min for u8 {
    fn min() -> u8 {
        std::u8::MIN
    }
}

impl Max for u8 {
    fn max() -> u8 {
        std::u8::MAX
    }
}

impl Min for i32 {
    fn min() -> i32 {
        std::i32::MIN
    }
}

impl Max for i32 {
    fn max() -> i32 {
        std::i32::MAX
    }
}

fn print_min_max<T: Min + Max + Display>() {
    println!("{} -> {}", T::min(), T::max());
}

fn main() {
    let m: i32 = Min::min();
    println!("{}", m);

    print_min_max::<u8>();
    print_min_max::<i32>();
}
Run Code Online (Sandbox Code Playgroud)

操场