【描述】
关键字 as 只用于有损转换无法避免时,否则尽可能利用 From::from 或 TryFrom::try_from 实现无 损转换。
【正例】
- 考虑是否必须要做有损的算术转换,如非必要,应使用相同类型来避免转换。
Rust
let a: f64 = 64.0;
let b: f64 = a; // 符合
【正例】
- 在将数据从低位转为高位时,建议使用 from 转换,代表无损转换:
Rust
let c: u16 = 512;
let p = u64::from(c); // 符合
【正例】
- 在必须做数据有损的算术转换但不希望数据截断的情况下,使用 try_from 保证数据准确性:
Rust
let b: isize = 512;
let y: Result<i8, _> = i8::try_from(b); // 符合
【例外】
- 在必须做数据有损的算术转换但业务场景允许数据截断,或无法通过 from / try_from 显式转换 时,可继续使用类型强转:
Rust
let a: f64 = 64.0;
let b: i64 = 100000;
let _: f32 = a as f32; let _: i16 = b as i16;