我想T用它的最小值初始化一个类型的变量,比如T::min(). 在 Rust 1.40.0 中可以不需要外部依赖吗?
另一种方法是将变量设置为None,但这会在None每次我想增加变量时引入检查开销。
标准库中没有这样的特性。
但是,如果您愿意为您感兴趣的类型创建适当的特征并实现它们,则可以为没有外部依赖关系的任意类型使用 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)
| 归档时间: |
|
| 查看次数: |
1158 次 |
| 最近记录: |