Generics 如何调用std::num::Float::epsilon()之类的静态trait方法?

Generics 如何调用std::num::Float::epsilon()之类的静态trait方法?,generics,methods,static,rust,Generics,Methods,Static,Rust,我刚刚开始学习生锈,我碰到了这个我无法解决的问题 在Rust中,std::num::Float trait(以及其他trait)中有一些不带参数的静态方法。那没关系,但我发现他们无法打电话。我尝试过以下几种选择: Float::epsilon() // complains that "type annotations required" Float::<f32>::epsilon() // complains "too many type parameters pr

我刚刚开始学习生锈,我碰到了这个我无法解决的问题

在Rust中,std::num::Float trait(以及其他trait)中有一些不带参数的静态方法。那没关系,但我发现他们无法打电话。我尝试过以下几种选择:

Float::epsilon()         // complains that "type annotations required"
Float::<f32>::epsilon()  // complains "too many type parameters provided"
Float::epsilon::<f32>()  // same thing as the previous one
f32::epsilon()           // I'd love this syntax to work, but it doesn't
Float::epsilon()//抱怨“需要类型注释”
Float:::epsilon()//抱怨“提供的类型参数太多”
Float::epsilon::()//与上一个相同
f32::epsilon()//我希望这个语法能起作用,但它不能

有人解决过这个问题吗?仅仅是我的愚蠢,还是这在锈菌本身就是一个真正的问题?

关于性状的静态方法被称为像
Float::epsilon
。这意味着,如果你给它一个类型提示,让它与特质的
Self
类型相匹配,那么这将起作用

use std::num::Float;

let eps: f32 = Float::epsilon();
如果无法以任何其他方式推断具体的trait实现者,例如如果签名中根本没有
Self
,则调用特定trait方法有一个通用语法:

<f32 as Float>::epsilon()

谢谢,这个有用。但是,一般语法必须是最近添加的,因为它在我的本地编译器(不是最新版本)上不起作用,但在Rust的网站上起作用,所以我必须更新我的编译器。:)我发现可以直接调用traits上的方法非常有趣!
<F as Float>::epsilon()