实施 T::ten()

Implementing T::ten()

我想实现一个函数,returns 给定数字的数字向量。例如,

digits(1234) -> Vec[1, 2, 3, 4]

为了使这个函数适用于任何整数类型,我写了这样的函数签名:

fn digits<T: Num>digits(T: n) -> Vec<i32> {
   ...
}

基本思想是在以下循环中通过 n % 10 获取最后一位数字:

let mut acc: Vec<i32> = Vec::new();
while n != 0 {
  acc.push(n & 10);
  n /= 10;
}
acc.reverse();
acc // return digits

但这适用于特定的整数类型。我想让它通用。问题是我需要一个类似于 T::one().

的通用 10

我尝试将 10 乘以 T::one() 但没有成功。我能想到的另一个技巧是将 T::one() 添加十次:

let ten = T::one() + T::one() + ... + T::one(); // add 10 times

但我不确定这是最好的方法吗?有什么想法吗?

Aplet123 mentioned in the comment above, you can use FromPrimitive.

let ten: T = T::from_i8(10).unwrap();

我认为 unwrap() 是安全的,因为我们知道它不会失败。