Есть ли в стандартной библиотеке Rust черта Min / Max? - PullRequest
2 голосов
/ 23 января 2020

Я хочу инициализировать переменную типа T с ее минимальным значением, таким как T::min(). Возможно ли это в Rust 1.40.0 без внешней зависимости?

Альтернативный подход состоит в том, чтобы установить переменную равной None, но это приводит к накладным расходам None, проверяющим каждый раз, когда я хочу увеличить переменную.

1 Ответ

5 голосов
/ 23 января 2020

В стандартной библиотеке нет таких черт.

Однако возможно иметь обобщенную концепцию c 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>();
}

Это печатает:

-2147483648
0 -> 255
-2147483648 -> 2147483647

Детская площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...