Generics 为所有基本整数类型定义功能的惯用方法
我为Generics 为所有基本整数类型定义功能的惯用方法,generics,rust,macros,Generics,Rust,Macros,我为i64定义了一个函数,它返回数字位数的迭代器 () 我尝试使用泛型实现它,其中T:Integer+Div+Rem等,但我不能像使用原语一样将泛型:num转换为f64 我的倾向是,这可能与宏规则有关(可能使用expr和ty),但我对Rust中的宏非常陌生。任何指导都将不胜感激。我不能像使用原语一样将泛型-使用从/转换为/num::NumCast/num::ToPrimitive。@Shepmaster,这非常有用。非常感谢。 fn digits_of(num: i64) -> impl
i64
定义了一个函数,它返回数字位数的迭代器
()
我尝试使用泛型实现它,其中T:Integer+Div+Rem
等,但我不能像使用原语一样将泛型:num转换为f64
我的倾向是,这可能与
宏规则有关代码>(可能使用expr
和ty
),但我对Rust中的宏非常陌生。任何指导都将不胜感激。我不能像使用原语一样将泛型-使用从
/转换为
/num::NumCast
/num::ToPrimitive
。@Shepmaster,这非常有用。非常感谢。
fn digits_of(num: i64) -> impl Iterator<Item = u8> {
let num = num.abs();
let nth_digit = move |exp| (num / 10_i64.pow(exp) % 10) as u8;
let largest_exponent = (num as f64).log10() as u32;
(0..=largest_exponent).into_iter().map(nth_digit).rev()
}
fn main() {
for digit in digits_of(-8675309) {
println!("{}", digit);
}
}
fn main() {
let x: u8 = 10;
for digit in digits_of(x as u128) {
println!("{}", digit);
}
}