文章分享《Rust中的New Type解答了我十多年前的一个疑问》

文章分享《Rust中的New Type解答了我十多年前的一个疑问》

🔗 mp.weixin.qq.com/s/1-peBDmwSRRgtol...

本文简单介绍了两种定义“新”类型的方法,New Type和类型别名,并通过时间段Duration这个类型,对比了二者的区别。

New Type的主要用途有以下几点,

  • 用更加有意义,更具描述性和表现力的词语作为类型名,提升可读性(对比intAgestringUserEmail

  • 类型检查、类型安全(struct T(t)Tt是不同的类型)

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

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!