G.TYP.03 不要用数字类型边界值判断能否安全转换,而应使用 try_from 方法

【级别】 建议

【描述】

在 Rust 中 From 代表不能失败的转换,而 TryFrom 则允许返回错误。

一般在数字类型转换的时候,不需要防御式地去判断数字大小边界,那样可读性比较差,应该使用 try_from 方法,在无法转换的时候处理错误即可。

【反例】


#![allow(unused)]
#![warn(clippy::checked_conversions)]

fn main() {
// 不符合
let foo: u32 = 5;
let _ = foo <= i16::MAX as u32; // 等价于 let _ = foo <= (i32::MAX as u32);
}

【正例】


#![allow(unused)]
#![warn(clippy::checked_conversions)]

fn main() {
// 符合
let foo: u32 = 5; 
let f = i16::try_from(foo).is_ok(); // 返回 false
}

【Lint 检测】

lint nameClippy 可检测Rustc 可检测Lint Grouplevel
checked_conversionsyesnopedanticallow