文章分享《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的用途文中并没有提及,关于这些内容,大家可以参考以下文章
关于 LearnKu