Я написал функцию длины для u32
. Я мог бы легко копировать / вставлять / редактировать другие типы int, но когда я пытаюсь использовать дженерики, я застреваю. Есть ли понятия, которые я неправильно понимаю?
Функция длины передачи
fn len_int(n: u32) -> u32 { // 0
std::iter::repeat_with({
let mut l = 0;
// can't call pow on ambiguous numeric type
move || match n / 10u32.pow(l) { // 1
0 => 0,
_ => {
l += 1;
1
}
}
})
.take_while(|&x| x != 0)
// count returns usize
.count() as u32 // 2
}
Неисправная функция длины c: I
fn len_int<T>(n: T) -> T
where
T: Copy + Clone,
{
std::iter::repeat_with({
let mut l = 0;
move || match n / 10.pow(l) {
//1
0 => 0,
_ => {
l += 1;
1
}
}
})
.take_while(|&x| x != 0)
.count() at T // 2
}
Компилятор сообщает мне Я не могу call method pow on ambiguous numeric type {integer}
cannot divide T by type error
или конвертировать count()
в конце с as T
, так как T не является примитивным типом. детская площадка