如何调用像 std::num::Float::epsilon() 这样的静态特征方法?
How to call a static trait method like std::num::Float::epsilon()?
我刚开始学习 Rust,但遇到了这个我无法解决的问题。
在 Rust 中,std::num::Float 特征(以及其他特征)中有静态方法,它们不带参数。没关系,但我发现他们无法打电话。我尝试了这些选项:
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 本身就有这个问题?
traits 的静态方法被称为 Float::epsilon
。这意味着这将起作用,如果你给它一个类型提示来匹配特征的 Self
类型。
use std::num::Float;
let eps: f32 = Float::epsilon();
如果无法以任何其他方式推断出具体的特征实现者,例如如果签名中根本没有 Self
,则有调用特定特征方法的通用语法:
<f32 as Float>::epsilon()
或者如果你有一个类型参数 F: Float
:
<F as Float>::epsilon()
我刚开始学习 Rust,但遇到了这个我无法解决的问题。
在 Rust 中,std::num::Float 特征(以及其他特征)中有静态方法,它们不带参数。没关系,但我发现他们无法打电话。我尝试了这些选项:
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 本身就有这个问题?
traits 的静态方法被称为 Float::epsilon
。这意味着这将起作用,如果你给它一个类型提示来匹配特征的 Self
类型。
use std::num::Float;
let eps: f32 = Float::epsilon();
如果无法以任何其他方式推断出具体的特征实现者,例如如果签名中根本没有 Self
,则有调用特定特征方法的通用语法:
<f32 as Float>::epsilon()
或者如果你有一个类型参数 F: Float
:
<F as Float>::epsilon()