如果 Rust 支持两个 percent
函数,我将如何执行以下操作?
fn percent(x: u8) -> f32 {
x as f32 / 100.0
}
fn percent(x: u16) -> f32 {
x as f32 / 100.0
}
如果我尝试使用如下所示的通用数据类型:
fn percent<T>(x: T) -> f32 {
x as f32 / 100.0
}
我收到错误
non-primitive cast:
T
asf32
我可以用某种整数特征来约束 T
吗?
最佳答案
如果您只想支持 u8
和 u16
类型,则:
fn percent<T: Into<f32>>(x: T) -> f32 {
x.into() / 100.0
}
就足够了,因为u8
和u16
都可以无损地转换为f32
。如果您想进行一般转换,例如将 u64
转换为 f64
,这可能会导致精度损失,您可以使用 ApproxInto
来自 conv
的特征。
fn percent<T: ApproxInto<f64>>(x: T) -> Result<f64, T::Err> {
x.approx_into().map(|v| v / 100.0)
}
关于rust - Rust中不同整数类型的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60663864/