Rust 的 `as` 带来的惊喜(以及 Python 除法)| anya hope

主要观点:作者从高级语言转向 Rust 语言,在使用 as 进行类型转换时遇到意外行为,开始避免使用 as,并介绍了替代 as 的方法 TryFrom
关键信息

  • 许多从 Python 等高级语言转向 Rust 的人起初感到沮丧,Rust 类型系统更严格。
  • Python 中动态类型和类型强制转换虽方便但易导致微妙错误,如 get_halfget_half_floor 函数的行为不一致。
  • Rust 函数对参数类型要求严格,使用 as 可绕过类型限制,但可能导致溢出等意外行为,如 get_half_floor 函数在处理 u8 类型时。
  • 替代 as 的方法是使用 TryFrom,它能在类型转换可能出错时告知程序员并让其决定如何处理,虽更冗长但更安全。
    重要细节
  • Rust 有 14 种内置数字类型,Python 有 3 种,JS 有 1 或 2 种。
  • Rust 中 get_half 函数只接受 f64 类型参数,其他类型需转换。
  • as 用于类型转换时,若转换为较小尺寸值可能导致溢出,如将 288 转换为 u8 时只保留 8 位低位二进制数。
  • 使用 TryFrom 时可通过 match 处理转换错误,如在 get_half_floor 函数中处理 u8 类型转换。
  • 文中还提到了一些相关资源和感谢的人,如 YARR!、David Glivar、Nicole Tietz-Sokolskaya 等。
阅读 11
0 条评论