Rust标准库是否具有最小/最大特性?
我想用它的最小值初始化一个Rust标准库是否具有最小/最大特性?,rust,Rust,我想用它的最小值初始化一个T类型的变量,如T::min()。Rust 1.40.0中是否可能不需要外部依赖 另一种方法是将变量设置为None,但这会导致每次我要增加变量时检查None的开销。标准库中没有此类特征 但是,如果您愿意创建适当的特征并为您感兴趣的类型实现它们,则对于没有外部依赖关系的任意类型,可以有一个“最小”和“最大”的通用概念,例如: use core::fmt::Display; trait Min { fn min() -> Self; } trait Max
T
类型的变量,如T::min()
。Rust 1.40.0中是否可能不需要外部依赖
另一种方法是将变量设置为
None
,但这会导致每次我要增加变量时检查None
的开销。标准库中没有此类特征
但是,如果您愿意创建适当的特征并为您感兴趣的类型实现它们,则对于没有外部依赖关系的任意类型,可以有一个“最小”和“最大”的通用概念,例如:
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>();
}
“另一种方法是将变量设置为无。但这会导致每次我想增加变量时都进行无检查的开销。“这是从哪里来的?你的意思类似于或吗?@khuynh是的,但我在一个以
T
为参数的函数中。这意味着我不知道t
是i32
还是i8
。我所能做的就是调用min\u value()
或min()
来获得最小值。这是一个问题吗?可能有一种解决方案不需要知道t的最小值或最大值。是的,正如我在问题中所说,我可以使用可选类型。但是,在循环中对变量进行变异之前,检查变量是否为None
会带来一定的开销。直接回答以下问题可以改进此答案:不,标准库中没有类似的内容。最小和最大特征可能取决于Ord
。;有一个最高和最低的元素没有一个总的顺序是没有多大意义的。有一个“最大”和“最小”元素。我们可以定义元素的顺序。但严格地说,排序不是部分或全部排序。(因为亚述梅里的财产不令人满意。)@MichaelAnderson我认为你错了;这是一个完全有序的集合。但是,我同意,对于唯一的最小值或最大值,不需要总订单。@MichaelAnderson您是对的;当=
定义为关心x
和y
但