Compiler errors 如何使用Ord::max函数?
在这个简单的程序中,我尝试调用Compiler errors 如何使用Ord::max函数?,compiler-errors,rust,Compiler Errors,Rust,在这个简单的程序中,我尝试调用i32.max(i32): 为什么会发生这种情况?我用的是Rust 1.17.0 如何使用(或)功能 如果使用浮点值,则该示例有效: let a: f32 = 0.0; let b: f32 = 1.0; let c: f32 = a.max(b); 这让事情变得更加神秘。如果你想比较数字,你可以这样做: use std::cmp; fn main() { let a: i32 = 0; let b: i32 = 1; let c: i3
i32.max(i32)
:
为什么会发生这种情况?我用的是Rust 1.17.0
如何使用(或)功能
如果使用浮点值,则该示例有效:
let a: f32 = 0.0;
let b: f32 = 1.0;
let c: f32 = a.max(b);
这让事情变得更加神秘。如果你想比较数字,你可以这样做:
use std::cmp;
fn main() {
let a: i32 = 0;
let b: i32 = 1;
let c: i32 = cmp::max(a, b);
println!("{}", c);
}
它可以与较新的编译器配合使用。你可以看到这个 问题是您试图调用一个不存在的方法。至少,在你使用的Rust版本中没有。注意到它是在Rust版本1.21.0中引入的 你想要的是使用,这是一个函数,而不是一个方法。因此,你这样称呼它:
use std::cmp;
let c = cmp::max(a, b);
至于为什么它适用于
f32
,可以通过查看文档找到答案:显示f32
和f64
有自己的max
方法版本。这是因为cmp::max
和Ord::max
都只对具有总排序的类型起作用。由于NaN的存在,浮点数不是完全有序的,因此它们不能使用这两个浮点数。这是我做的一个愚蠢的疏忽!我阅读了将API引入Java和Python的版本。对于Rust,我假设整数min/max非常基本,从一开始就应该实现它们。我根本不想在这里检查API版本。请注意,您可以通过打开编译器附带的文档或将版本号添加到URL(检查我用于cmp::max
)来浏览文档以查找该语言的任何版本.@Nayuki我假设整数min/max是如此的基本,它们应该从一开始就实现了-。我的意思是这是一个解决方案,但没有解释太多,这是我的责任~我应该注意到你之前要求的不仅仅是一个工作代码示例:)。
use std::cmp;
let c = cmp::max(a, b);