我可以使用结构体更新语法来更新单个结构体,但我无法在类似结构体的枚举变量中使用它。同时,我也不能使用点语法来更新类似结构体的枚举变量中的字段。
例如:
这段代码:
例如:
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
如何从类似结构体的枚举变量中更新字段?
enum Foo { Variant(StructName) }
。我忘记你所拥有的确切名称,但它可能是一个“枚举结构体”或者是一个“结构体变量枚举”? - Shepmasterstrct
的类型是Enum
,而不是Enum::Struct
,因为Enum::Struct
本身并不是一种类型。因此,即使在这种特殊情况下它始终是Enum::Struct
,编译器也无法推断出它的类型。 - Vladimir Matveev