Struct 类结构枚举变量中的更新字段
我可以将struct update语法用于单个结构,但无法将其用于类似于结构的枚举变量。我也不能使用点语法从类似结构的枚举变量更新字段 例如: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_
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
,编译器也无法对此进行推理。