Struct 类结构枚举变量中的更新字段

Struct 类结构枚举变量中的更新字段,struct,enums,rust,Struct,Enums,Rust,我可以将struct update语法用于单个结构,但无法将其用于类似于结构的枚举变量。我也不能使用点语法从类似结构的枚举变量更新字段 例如: enum Enum { Struct { field1: i32, field2: i32, } } fn main() { let mut my_enum = Enum::Struct { field1: 1, field2: 2, }; my_

我可以将struct update语法用于单个结构,但无法将其用于类似于结构的枚举变量。我也不能使用点语法从类似结构的枚举变量更新字段

例如:

enum Enum {
    Struct {
        field1: i32,
        field2: i32,
    }
}

fn main() {
    let mut my_enum = Enum::Struct {
        field1: 1,
        field2: 2,
    };

    my_enum = Enum::Struct {
        field1: 1,
        .. my_enum
    };

    my_enum = match my_enum {
        strct@Enum::Struct { field1, field2 } => Enum::Struct {
            field1: 1,
            .. strct
        },
    };
}
这两种方式都会给我一个错误:

functional record update syntax requires a struct
此代码:

my_enum.field1 = 3;
给我以下错误:

attempted access of field `field1` on type `Enum`, but no field with that name was found

如何从类似枚举变量的结构更新字段?

这里有一种方法:

match my_enum {
    Enum::Struct { ref mut field1, .. } => {
        *field1 = 3;
    }
}

这并不是真正的“枚举中的结构”。这样的事情看起来像
enumfoo{Variant(StructName)}
。我忘了你所拥有的东西的确切名称,但它可能是一个“枚举结构”或“结构变量枚举”?相关的,但没有回答你的问题,这是最近的一篇文章,它以某种方式将这两个概念结合在一起。它被称为“类似结构的枚举变量”,但我认为它通常被称为结构变体。我发现,但有一个人说,他“不明白这是如何工作的”。知道这为什么不起作用吗?嗯,是的,这不起作用,因为
strct
属于
Enum
类型,而不是
Enum::Struct
,因为
Enum::Struct
本身不是一种类型。因此,即使在这种特殊情况下,它总是
Enum::Struct
,编译器也无法对此进行推理。