gpt4 book ai didi

struct - 将 Enum 定义为 Struct(为什么要使用这种语法)

转载 作者:行者123 更新时间:2023-12-05 03:32:21 25 4
gpt4 key购买 nike

在 Rust 的 chrono librarysrc/format/mod.rs#L338-L345 中有此代码:

pub struct ParseError(ParseErrorKind);

enum ParseErrorKind {
OutOfRange,
...
}
  1. 在第一行中,语法 struct ParseError(ParseErrorKind) 是什么意思?枚举 ParseErrorKind 是否有点“别名”为名为 ParseError 的结构,或者 ParseError 是一个包含枚举类型 的匿名字段的结构ParseErrorKind?如果是后者,将如何访问该字段?或者这是别的东西?
  2. 使用这种struct 语法有什么好处?为什么不直接将 ParseErrorKind 用作类型(而不是将其包装到结构中)?

最佳答案

In the first line, what does the syntax struct ParseError(ParseErrorKind) mean? Is enum ParseErrorKind somewhat "aliased" as a struct called ParseError, or is ParseError a struct that contains an anonymous field of enum type ParseErrorKind? If the latter, how would one access the field? Or is this something else?

这是一个tuple struct ,在本例中包装了一个内部错误类型。与其他结构的主要区别是字段没有命名。相反,它们像元组一样访问(例如 my_instace.0,以引用内部数据)。引用docs了解更多信息

What is the advantage of using this struct syntax? Why not use ParseErrorKind as a type directly (instead of wrapping it into a struct)?

在这种情况下,它将枚举构造函数抽象为单一类型。我的猜测是他们认为错误 kind 是一个实现细节,不应在 API 中公开。请注意,ParseErrorKind 是私有(private)的,而 ParseError 是公共(public)的(可以私有(private)访问内部的单个元组)。

此外,包装类型也是一种常见的模式,以便在这些类型不是您自己的 crate 原生的情况下扩展这些类型的功能。

关于struct - 将 Enum 定义为 Struct(为什么要使用这种语法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70488763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com