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);