]>
Commit | Line | Data |
---|---|---|
ea8adc8c XL |
1 | # Enumeration Variant expressions |
2 | ||
0bf4aa26 XL |
3 | > **<sup>Syntax</sup>**\ |
4 | > _EnumerationVariantExpression_ :\ | |
5 | > _EnumExprStruct_\ | |
6 | > | _EnumExprTuple_\ | |
7 | > | _EnumExprFieldless_ | |
8 | > | |
9 | > _EnumExprStruct_ :\ | |
10 | > [_PathInExpression_] `{` _EnumExprFields_<sup>?</sup> `}` | |
11 | > | |
12 | > _EnumExprFields_ :\ | |
13 | > _EnumExprField_ (`,` _EnumExprField_)<sup>\*</sup> `,`<sup>?</sup> | |
14 | > | |
15 | > _EnumExprField_ :\ | |
16 | > [IDENTIFIER]\ | |
17 | > | ([IDENTIFIER] | [TUPLE_INDEX]) `:` [_Expression_] | |
18 | > | |
19 | > _EnumExprTuple_ :\ | |
20 | > [_PathInExpression_] `(`\ | |
21 | > ( [_Expression_] (`,` [_Expression_])<sup>\*</sup> `,`<sup>?</sup> )<sup>?</sup>\ | |
22 | > `)` | |
23 | > | |
24 | > _EnumExprFieldless_ : [_PathInExpression_] | |
25 | ||
26 | Enumeration variants can be constructed similarly to [structs], using a path to an enum | |
27 | variant instead of to a struct: | |
ea8adc8c XL |
28 | |
29 | ```rust | |
30 | # enum Message { | |
31 | # Quit, | |
32 | # WriteString(String), | |
33 | # Move { x: i32, y: i32 }, | |
34 | # } | |
35 | let q = Message::Quit; | |
36 | let w = Message::WriteString("Some string".to_string()); | |
37 | let m = Message::Move { x: 50, y: 200 }; | |
38 | ``` | |
0bf4aa26 XL |
39 | |
40 | Enum variant expressions have the same syntax, behavior, and restrictions as [struct | |
41 | expressions][structs], except they do not support base update with the `..` syntax. | |
42 | ||
416331ca XL |
43 | [IDENTIFIER]: ../identifiers.md |
44 | [TUPLE_INDEX]: ../tokens.md#integer-literals | |
45 | [_Expression_]: ../expressions.md | |
46 | [_PathInExpression_]: ../paths.md#paths-in-expressions | |
47 | [structs]: struct-expr.md |