Mat*_* M. 32
首先,你是正确的,在语义enum上严格优于struct它可以代表什么,因此struct有点多余.
但是,这里还有其他元素在起作用.
易用性:enum只能通过匹配(直接)访问a中的值; 与访问struct字段的易用性形成对比.你可以为每个字段编写访问器,但这真的很麻烦.
区别:a enum是标记的联合,a struct是固定布局; 我们(程序员)通常喜欢在事物上贴标签,因此可以理解为不同的功能赋予不同的名称.
正如我所看到的,struct因此是语法糖.我通常更喜欢精益和卑鄙,但是一点点糖可以在很大程度上增加可以简洁的代表.
Man*_*rth 19
首先,Rust有各种各样的数据类型:
struct Foo {bar: uint})struct Foo(pub Bar, Baz))struct Foo;)None)Some(T))Some { pub inner :T })这为程序员提供了定义数据类型的一些灵活性.通常,您不需要命名字段,尤其是在struct/variant只有一个字段的情况下.在这种情况下,Rust允许您使用元组结构/元组变体.
如果从Rust中删除了结构,那么就不会丢失功能,可以再次使用带有结构变体的枚举.但是会有大量的单变量枚举,这些枚举使用起来既不必要又麻烦.
不是100%正确,但另一个好想想的方法:enum实际上并不优于struct,语法糖只是让它看起来像它.
An enum是和类型,意味着它的值是一组其他类型之一的值.的Result<T, E>类型是任一类型的T或E.因此每个enum变体只有一种与之相关的类型.其他所有(没有类型,元组变体和结构变体)可能是语法糖.
enum Animal {
// without syntax sugar
Cat(i32),
// desugars to `Dog(())` (empty tuple/unit)
Dog,
// desugars to `Horse((i32, bool))` (tuple)
Horse(i32, bool),
// desugars to `Eagle(GeneratedEagleType)` and a struct definition outside
// of this enum `struct GeneratedEagleType { weight: i32, male: bool }`
Eagle { weight: i32, male: bool }
}
Run Code Online (Sandbox Code Playgroud)
因此,如果每个enum变体只与一种类型相关联就足够了.并且在这种情况下enum并不优越struct,因为它无法构建产品类型(如struct).
能够在枚举变体定义中编写"类型定义"只是为了方便起见.
另外:struct也优于"元组结构"和"元组".如果我们忽略名称那么这三件事几乎是等价的.但Rust为方便起见仍然有这三种不同的类型.
请注意,我不知道这些枚举定义是否实际上是语法糖.但它们可能是,这可能有助于思考.它
| 归档时间: |
|
| 查看次数: |
7570 次 |
| 最近记录: |