首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Ord::max函数?

如何使用Ord::max函数?
EN

Stack Overflow用户
提问于 2017-11-06 05:54:26
回答 2查看 1.7K关注 0票数 2

在这个琐碎的程序中,我尝试调用i32.max(i32)

代码语言:javascript
复制
fn main() {
    let a: i32 = 0;
    let b: i32 = 1;
    let c: i32 = a.max(b);  // <-- Error here
    println!("{}", c);
}

但是我得到了一个神秘的编译时错误:

代码语言:javascript
复制
error: no method named `max` found for type `i32` in the current scope
 --> prog.rs:4:17
  |
4 |     let c: i32 = a.max(b);
  |                    ^^^
  |
  = note: the method `max` exists but the following
    trait bounds were not satisfied: `i32 : std::iter::Iterator`

这一切为什么要发生?我用的是铁锈1.17.0。

如何使用max() (或min())函数?

如果我使用浮点值,则此示例有效:

代码语言:javascript
复制
let a: f32 = 0.0;
let b: f32 = 1.0;
let c: f32 = a.max(b);

这使事情变得更加神秘。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-06 07:09:31

它在最近的编译器中运行得很好。你可以通过在玩具笔上试着看到这个。

问题是,您试图调用一个不存在的方法。至少在你使用的铁锈版本中没有。Ord::max注意到它是在锈蚀版本1.21.0中引入的。

您想要的是使用cmp::max,它是一个函数,而不是方法。因此,你这样称呼它:

代码语言:javascript
复制
use std::cmp;
let c = cmp::max(a, b);

至于它为什么适用于f32,可以通过查看文档找到答案:max揭示了f32f64有自己的max方法版本。这是因为cmp::maxOrd::max都只对具有完全顺序的类型工作。由于NaN的存在,浮子并不是完全有序的,所以它们不能使用这两种。

票数 6
EN

Stack Overflow用户

发布于 2017-11-06 06:23:56

如果你想比较数字,你可以这样做:

代码语言:javascript
复制
use std::cmp;

fn main() {
    let a: i32 = 0;
    let b: i32 = 1;
    let c: i32 = cmp::max(a, b);
    println!("{}", c);
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47130574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档