如何调用像std :: num :: Float :: epsilon()这样的静态特征方法?

fai*_*ace 3 generics methods static rust

我刚开始学习Rust一点,我遇到了这个问题,我无法解决.

在Rust中,std :: num :: Float 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
Run Code Online (Sandbox Code Playgroud)

有没有人解决这个问题?难道只是我是愚蠢的,或者这是Rust内部的真正问题?

blu*_*uss 7

特征上的静态方法称为Float::epsilon.这意味着如果你给它一个类型提示来匹配Self特征的类型,这将是有效的.

use std::num::Float;

let eps: f32 = Float::epsilon();
Run Code Online (Sandbox Code Playgroud)

如果不可能以任何其他方式推断具体特征实现者,例如如果Self签名中根本没有,则调用特定特征方法有一般语法:

<f32 as Float>::epsilon()
Run Code Online (Sandbox Code Playgroud)

或者如果你有一个类型参数F: Float:

<F as Float>::epsilon()
Run Code Online (Sandbox Code Playgroud)