Expand description
Перобразование примитивных числовых типов через метод трейта AsPrim (замена опреатора as).
§Стандартная реализация с оператором as.
Изначально rust предоставляет нам возможность преобразования примитивных типов с помощью опреатора as.
В следующих примерах показано, как опреатор as может сбивать с толку из-за своей семнтики:
use core::f64::consts::PI;
let radius = 10_i32;
let circle_area = 2 as f64 * PI * radius as f64;Даже скобки не спасают:
let circle_area = (2 as f64) * PI * (radius as f64);§Реализация AsPrim
Трейт AsPrim и вспомогательные ему FromPrim и ToPrim преднозначены для того, чтобы добиться функционального стиля в преобразовании примитивных типов без оператора as.
let circle_area = 2.as_::<f64>() * PI * radius.as_::<f64>();
let vec: Vec<f32> = vec![2.as_(), circle_area.as_(), 4_isize.as_()];Также вы можете использовать FromPrim, как будто используете From:
let num = f64::as_from(10_i32);
Или использовать ToPrim для преобразования напрямую:
let num = 2.to_f32();