Rust中不同整数类型的函数参数
Function parameter of different integer types in Rust
如果 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
as f32
我可以用某种整数特征来约束 T
吗?
如果只想支持u8
和u16
类型,那么:
fn percent<T: Into<f32>>(x: T) -> f32 {
x.into() / 100.0
}
就足够了,因为 u8
和 u16
都可以无损地转换为 f32
。如果你想一般地转换,比如说 u64
到 f64
,在这种情况下可能会发生精度损失,你可以使用 conv
的 ApproxInto
特征。
fn percent<T: ApproxInto<f64>>(x: T) -> Result<f64, T::Err> {
x.approx_into().map(|v| v / 100.0)
}
如果 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
,在这种情况下可能会发生精度损失,你可以使用 conv
的 ApproxInto
特征。
fn percent<T: ApproxInto<f64>>(x: T) -> Result<f64, T::Err> {
x.approx_into().map(|v| v / 100.0)
}