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);
    }
}