泛型 Float 类型和声明的 const

const of generic Float type and declaration

我正在尝试实现泛型类型的常量值,但编译器无法确定类型(错误:在此范围内找不到类型 T)。

use num::Float

pub const R: T = T::from(8314.4621).unwrap();

fn main() {
    println!("{:?}", foo(3.0_f64))
}

pub fn foo<T: Float>(a: T) -> T {
    a * R
}

您不能拥有通用的 const。您必须在 foo():

内执行计算
pub fn foo<T: Float>(a: T) -> T {
    a * T::from(8314.4621).unwrap()
}
  • Furthermore, is there any easier way to declare the value instead of this verbose way T::from(8314.4621).unwrap()?

不适用于任意数(对于特殊数,例如0-01、∞等,可以使用Float trait的方法和超级特征,例如 zero()).

  • Just to be sure, is this solved in compile or run time?

对于 const(你不能),在编译时。

如果在运行时内联,但编译器会将其优化掉。