我刚刚开始学习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
有没有人解决这个问题?这只是我的愚蠢,还是Rust内部的真正问题?
答案 0 :(得分:7)
对特征的静态方法称为Float::epsilon
。这意味着如果你给它一个类型提示来匹配特征的Self
类型,这将有效。
use std::num::Float;
let eps: f32 = Float::epsilon();
如果不可能以任何其他方式推断出具体的特征实现者,那么调用特定特征方法有一般语法,例如,如果签名中根本没有Self
:
<f32 as Float>::epsilon()
或者如果您有类型参数F: Float
:
<F as Float>::epsilon()