文章分享《Rust中的New Type解答了我十多年前的一个疑问》
文章分享《Rust中的New Type解答了我十多年前的一个疑问》
🔗 mp.weixin.qq.com/s/1-peBDmwSRRgtol...
本文简单介绍了两种定义“新”类型的方法,New Type和类型别名,并通过时间段Duration
这个类型,对比了二者的区别。
New Type的主要用途有以下几点,
用更加有意义,更具描述性和表现力的词语作为类型名,提升可读性(对比
int
和Age
,string
和UserEmail
)类型检查、类型安全(
struct T(t)
,T
和t
是不同的类型)(可能是Rust独有的)为外部的类型实现外部的Trait,如为
std.string.String
实现std.fmt.Display
定义单位,明确数字的含义
封装、抽象私有的内部类型,并可以将校验逻辑绑定到类型上(如作为身份证号的字符串必须是18位)
缩减、限制类型的行为(如作为时间段或年龄的整数不能相乘)
New Type的一个缺点是,在重构代码时,若要使用New Type struct T(t)
替换基础数据类型t
,如用struct UserId(String)
替换作为用户ID的String
,那么就不得不沿着函数的调用链,逐一修改每个函数的参数。
而类型别名的主要用途包括:
用更加有意义,更具描述性和表现力的词语作为类型名,提升可读性(在这一点上与New Type一样)
缩短冗长的类型定义,减少重复出现的类型
有些New Type的用途文中并没有提及,关于这些内容,大家可以参考以下文章