Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String FromStr和TryFrom的区别是什么<;字符串>;特点?_String_Rust_Type Conversion - Fatal编程技术网

String FromStr和TryFrom的区别是什么<;字符串>;特点?

String FromStr和TryFrom的区别是什么<;字符串>;特点?,string,rust,type-conversion,String,Rust,Type Conversion,在Rust中使用Serde板条箱时,我尝试将一个#[Serde(try_from=String)]添加到一个实现FromStr的类型中,从而可以从String中解析。不幸的是,对于Serde来说,这似乎还不够,从编译器错误消息中可以明显看出,我也必须手动实现TryFrom 为什么对于所有实现FromStr的类型,TryFrom不会自动实现?为什么字符串的易错转换有一个单独的特性?这两种特性之间有什么区别?是一种通用特性,可用于“任何”类型。从文件中: 简单安全的类型转换,在某些情况下可能以受控方

在Rust中使用Serde板条箱时,我尝试将一个
#[Serde(try_from=String)]
添加到一个实现
FromStr
的类型中,从而可以从String中解析。不幸的是,对于Serde来说,这似乎还不够,从编译器错误消息中可以明显看出,我也必须手动实现
TryFrom

为什么对于所有实现
FromStr
的类型,
TryFrom
不会自动实现?为什么字符串的易错转换有一个单独的特性?这两种特性之间有什么区别?

是一种通用特性,可用于“任何”类型。从文件中:

简单安全的类型转换,在某些情况下可能以受控方式失败

Type->Type

它还提供了的自动实现

主要用于解析类型,也根据文档:

FromStr的FromStr方法通常通过str的parse方法隐式使用

str->Type

实现它以供

使用是一种通用特性,可用于“任何”类型。从文件中:

简单安全的类型转换,在某些情况下可能以受控方式失败

Type->Type

它还提供了的自动实现

主要用于解析类型,也根据文档:

FromStr的FromStr方法通常通过str的parse方法隐式使用

str->Type


将其用于

fromstrust
在Rust 1.0中稳定,
TryFrom
在Rust 1.34中稳定;在它存在之前很难使用它

为什么对于所有实现
FromStr
的类型,
TryFrom
不会自动实现

这将导致已实现
TryFrom
FromStr
的类型不明确。为了实现这一点,需要一种高级的专业化形式

为什么字符串的易出错转换有一个单独的特性

FromStr
从借用的字符串片段(
&str
)创建一个拥有的值,因此它在语义上不同于获取
字符串的所有权
TryFrom
将允许您重用为
字符串分配的内存

更接近的模拟是,
impl for…
,但是在从字符串解析值的“简单”情况下,在trait中具有生存期使得使用它更加复杂

另见:


  • FromStr
    在锈1.0中稳定,
    TryFrom
    在锈1.34中稳定;在它存在之前很难使用它

    为什么对于所有实现
    FromStr
    的类型,
    TryFrom
    不会自动实现

    这将导致已实现
    TryFrom
    FromStr
    的类型不明确。为了实现这一点,需要一种高级的专业化形式

    为什么字符串的易出错转换有一个单独的特性

    FromStr
    从借用的字符串片段(
    &str
    )创建一个拥有的值,因此它在语义上不同于获取
    字符串的所有权
    TryFrom
    将允许您重用为
    字符串分配的内存

    更接近的模拟是,
    impl for…
    ,但是在从字符串解析值的“简单”情况下,在trait中具有生存期使得使用它更加复杂

    另见:


    我认为答案是“出于历史原因”的平均值:str
    的AFAIK
    要老得多,而
    TryFrom
    只是后来才添加的。然而,您所期望的trait自动实现听起来是合乎逻辑的,可能是由于技术原因而无法轻松实现。您可能会发现,
    serde_with
    允许您这样做很有用,并且还有许多其他方便的功能,请访问
    serde_with
    的链接。我会看一看,但由于我的项目目标是m,我对额外的依赖关系相当敏感,以防它们增加输出大小。我认为答案是“出于历史原因”的平均值:AFAIK
    fromstry
    要老得多,而
    TryFrom
    是后来才添加的。然而,您所期望的trait自动实现听起来是合乎逻辑的,可能是由于技术原因而无法轻松实现。您可能会发现,
    serde_with
    允许您这样做很有用,并且还有许多其他方便的功能,请访问
    serde_with
    的链接。我会看一看,但由于我的项目目标是m,我对额外的依赖性相当敏感,以防它们增加输出大小。我应该注意到这两种特性都有不同的生命周期要求。不过,从
    实现
    TryFrom和使用
    #[serde(try_from=“&str”)]
    似乎效果不错。我应该注意到,这两种特性都有不同的寿命要求。不过,从
    实现
    尝试并使用
    #[serde(try_from=“&str”)]
    似乎效果不错。