Собственно код:
extern crate num_traits;
pub trait DigitCount {
fn decimal_digit_count(&self) -> usize;
}
impl
Метод decimal_digit_count должен вызываться для любого целого значения и возвращать количество десятичных разрядов в нём:
println!("{}", 123u64.decimal_digit_count());
Вопрос: как правильно записать преобразование T → f64 для последующего вызова методов abs, log10, trunc? В текущем виде компилятор требует аннотацию типа для into(), но если её подставить (into::
Ответ
У самого метода и правда нет типового параметра, потому что он есть у типажа:
pub trait Into
Первый вариант исправления - просто явно указать через промежуточную переменную какой тип мы в итоге хотим получить:
let f: f64 = self.into();
f.abs().log10().trunc() as usize + 1
(playpen)
Второй вариант - использовать UFCS форму вызова метода с явным обозначением T у типажа:
Into::
(playpen)
Метод decimal_digit_count должен вызываться для любого целого значения и возвращать количество десятичных разрядов в нём
На всякий случай еще добавлю что преобразование в f64 реализовано не для всех целых типов. Такое преобразование обязано всегда заканчиваться успехом, что невозможно, например, для u64 или i128 из-за невозможности вместить весь диапазон значений.
Комментариев нет:
Отправить комментарий