实施 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()
是安全的,因为我们知道它不会失败。
我想实现一个函数,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()
是安全的,因为我们知道它不会失败。