弥合 FromStr 和 String 之间的效率差距

主要观点:在 Rust 中有时需将字符串转换为特定类型,标准库的[FromStr] trait 有用但有缺点,即接收&str而非 String 会导致浪费克隆。为解决此问题引入新 trait FromString,可将 String 转换为目标类型等。
关键信息

  • [FromStr]可将&str转换为兼容类型,转换失败返回错误值但不一定是[Error]类型。
  • FromString 的定义及实现方式,包括对不同类型的转换处理,如利用 transmute_copy 避免克隆等。
  • 提供了方便调用 FromString 的辅助函数 from_string。
  • 给出了使用 FromString 的示例。
    重要细节
  • 定义了 Error 类型别名,用于统一错误处理。
  • 在实现 FromString 时,根据输入和输出类型的不同进行不同处理,对于类型相同的情况使用 transmute_copy。
  • 提到 nightly-only 的 transmute_unchecked 及理想的 specialization 但它们不稳定。
  • 感谢 David Tolnay 指出可使用 transmute_copy,以及 TypeId::of 调用要求 V 为'static 及可使用 typeid crate 中的 ConstTypeId。还标记了[rust]标签。
阅读 8
0 条评论