1
1
# Enumeration Variant expressions
2
2
3
- Enumeration variants can be constructed similarly to structs, using a path to
4
- an enum variant instead of to a struct:
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:
5
28
6
29
``` rust
7
30
# enum Message {
@@ -13,3 +36,12 @@ let q = Message::Quit;
13
36
let w = Message :: WriteString (" Some string" . to_string ());
14
37
let m = Message :: Move { x : 50 , y : 200 };
15
38
```
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
+
43
+ [ IDENTIFIER ] : identifiers.html
44
+ [ TUPLE_INDEX ] : tokens.html#integer-literals
45
+ [ _Expression_ ] : expressions.html
46
+ [ _PathInExpression_ ] : paths.html#paths-in-expressions
47
+ [ structs ] : expressions/struct-expr.html
0 commit comments