FromStr 和 TryFrom 特征之间有什么区别?

2024-01-19

当使用 Rust 中的 Serde 板条箱时,我尝试添加一个#[serde(try_from = String)] 容器属性 https://serde.rs/container-attrs.html到一个实现的类型FromStr因此可以从字符串中解析。不幸的是,这对于 Serde 来说似乎还不够,从编译器错误消息来看,很明显我必须手动实现TryFrom<String>, too.

Why is TryFrom<String>对于所有实现的类型,不会自动实现FromStr?为什么字符串的错误转换有一个单独的特征?这两个特征有什么区别?


FromStrRust 1.0 中很稳定,TryFromRust 1.34 中已稳定;在该特征存在之前,很难使用它。

Why is TryFrom<String>对于所有实现的类型,不会自动实现FromStr?

这会导致已经实现了这两种方法的类型产生歧义TryFrom and FromStr。一种高级形式专业化需要允许这样做。

为什么字符串的错误转换有一个单独的特征?

FromStr从借用的字符串切片创建一个拥有的值(&str),所以它在语义上与取得所有权不同String. TryFrom<String>将允许您重用分配给String.

更接近的模拟是impl<'a> TryFrom<&'a str> for ...,但是在特征中具有生命周期使得在从字符串中解析值的“简单”情况下使用它变得更加复杂。

也可以看看:

  • Rust 的 From/TryFrom 实现应该定位引用还是值? https://stackoverflow.com/q/48244892/155423
  • 使用泛型类型时,“From”的实现如何会发生冲突? https://stackoverflow.com/q/37347311/155423
  • TryFrom 和 TryFrom> 有什么区别? https://stackoverflow.com/q/65209340/155423
  • 如何实现具有具体生命周期的 FromStr? https://stackoverflow.com/q/28931515/155423
  • FromStr 特征不暴露生命周期的原因是什么? https://stackoverflow.com/q/30355949/155423
  • 当类型约束中的引用之一是本地引用时,如何编写引用的生命周期? https://stackoverflow.com/q/44343166/155423
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FromStr 和 TryFrom 特征之间有什么区别? 的相关文章

随机推荐