Nay*_*uki 2 compiler-errors rust
在这个微不足道的程序中,我尝试调用i32.max(i32):
fn main() {
let a: i32 = 0;
let b: i32 = 1;
let c: i32 = a.max(b); // <-- Error here
println!("{}", c);
}
Run Code Online (Sandbox Code Playgroud)
但是我收到一个神秘的编译时错误:
fn main() {
let a: i32 = 0;
let b: i32 = 1;
let c: i32 = a.max(b); // <-- Error here
println!("{}", c);
}
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?我正在使用 Rust 1.17.0。
如果我使用浮点值,则该示例有效:
let a: f32 = 0.0;
let b: f32 = 1.0;
let c: f32 = a.max(b);
Run Code Online (Sandbox Code Playgroud)
这让事情变得更加神秘。
它适用于更新的编译器。您可以通过在婴儿围栏上尝试来了解这一点。
问题是你试图调用一个不存在的方法。至少,不是在您使用的 Rust 版本中。在对文档Ord::max指出,它在鲁斯特版本1.21.0介绍。
你想要的是使用cmp::max,这是一个函数,而不是一个方法。因此,您可以这样称呼它:
use std::cmp;
let c = cmp::max(a, b);
Run Code Online (Sandbox Code Playgroud)
至于为什么它适用于f32,可以通过查看文档找到答案:搜索max揭示了这一点f32并f64拥有自己的max方法版本。而这是因为两者cmp::max并Ord::max只对具有全序类型的工作。由于 NaN 的存在,浮点数不是完全有序的,因此它们不能使用其中任何一个。
| 归档时间: |
|
| 查看次数: |
1360 次 |
| 最近记录: |