generics - 为所有原始整数类型定义功能的惯用方式
问题描述
我定义了一个函数,i64
它返回一个迭代数字的迭代器。
(游乐场)
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);
}
}
我想以某种方式对所有原始整数类型进行概括,但我想不出一个好的方法来做到这一点。
一种解决方案是为每个原语手动实现该功能,这会起作用,但需要大量的复制和粘贴。
另一个(不受欢迎的)解决方案是只为i128
and实现两次u128
,我总是可以转换一个较小的类型并通过以下方式调用它:
fn main() {
let x: u8 = 10;
for digit in digits_of(x as u128) {
println!("{}", digit);
}
}
我曾尝试使用泛型、whereT: Integer + Div + Rem
等来实现它,但我不能像使用原语那样转换泛型:num as f64
macro_rules!
我的倾向是(也许使用expr
and )这可能是可能的ty
,但我对 Rust 中的宏很陌生。任何指导将不胜感激。
解决方案
推荐阅读
- c++ - 在 qwebview qt 上使用 qwebelement 进行虚假点击
- mysql - Mysql 上的 Gtfs 数据库 - 搜索区域内的路线时查询缓慢
- php - 如何将变量与 Curl 代码 Php 连接起来
- file - 批处理文件将子文件夹内容从映射位置移动到服务器
- node.js - 如何在打字稿中触发变量值更改的事件 - nodejs
- quill - 文本搜索后如何设置选择?
- c# - 为什么我的自定义 MapRoute 会出现“参数字典包含参数的空条目”
- java - 如何以更好的方式解决 OutOfMemory 错误
- python - 枕头:如何将图像粘贴到另一个图像上?
- python - 两个一维数组之间的排列