我能够将结构更新语法与单个结构一起使用,但我无法将它与类似结构的枚举变体一起使用。我也不能使用点语法从类似结构的枚举变体更新字段。
例如:
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
},
};
}
Run Code Online (Sandbox Code Playgroud)
两种方式都给我一个错误:
functional record update syntax requires a struct
Run Code Online (Sandbox Code Playgroud)
这段代码:
my_enum.field1 = 3;
Run Code Online (Sandbox Code Playgroud)
给了我以下错误:
attempted access of field `field1` on type `Enum`, but no field with that name was found
Run Code Online (Sandbox Code Playgroud)
如何从类似结构的枚举变体更新字段?
这是一种方法:
match my_enum {
Enum::Struct { ref mut field1, .. } => {
*field1 = 3;
}
}
Run Code Online (Sandbox Code Playgroud)