泛型 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
}
- 我应该如何为
T
声明已实现的特性,例如 num
板条箱的 Float
特性?
- 此外,有没有更简单的方法来声明值而不是这种冗长的方法
T::from(8314.4621).unwrap()
?
- 确定一下,这是否在编译或 运行 时解决了?
您不能拥有通用的 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
、-0
、1
、∞等,可以使用Float
trait的方法和超级特征,例如 zero()
).
- Just to be sure, is this solved in compile or run time?
对于 const
(你不能),在编译时。
如果在运行时内联,但编译器会将其优化掉。
我正在尝试实现泛型类型的常量值,但编译器无法确定类型(错误:在此范围内找不到类型 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
}
- 我应该如何为
T
声明已实现的特性,例如num
板条箱的Float
特性? - 此外,有没有更简单的方法来声明值而不是这种冗长的方法
T::from(8314.4621).unwrap()
? - 确定一下,这是否在编译或 运行 时解决了?
您不能拥有通用的 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
、-0
、1
、∞等,可以使用Float
trait的方法和超级特征,例如 zero()
).
- Just to be sure, is this solved in compile or run time?
对于 const
(你不能),在编译时。
如果在运行时内联,但编译器会将其优化掉。