@@ -25,9 +25,9 @@ match input_2 {
25
25
# }
26
26
~~~~
27
27
28
- This code could become tiresome if repeated many times. However, there is no
29
- straightforward way to rewrite it without the repeated code, using functions
30
- alone. There is a solution, though: defining a macro to solve the problem . Macros are
28
+ This code could become tiresome if repeated many times. However, no function
29
+ can capture its functionality to make it possible to rewrite the repetition
30
+ away. Rust's macro system, however, can eliminate the repetition . Macros are
31
31
lightweight custom syntax extensions, themselves defined using the
32
32
` macro_rules! ` syntax extension. The following ` early_return ` macro captures
33
33
the pattern in the above code:
@@ -65,7 +65,7 @@ macro. It appears on the left-hand side of the `=>` in a macro definition. It
65
65
conforms to the following rules:
66
66
67
67
1 . It must be surrounded by parentheses.
68
- 2 . ` $ ` has special meaning.
68
+ 2 . ` $ ` has special meaning (described below) .
69
69
3 . The ` () ` s, ` [] ` s, and ` {} ` s it contains must balance. For example, ` ([) ` is
70
70
forbidden.
71
71
@@ -118,10 +118,11 @@ expression, `() => (let $x=$val)` is a macro that expands to a statement, and
118
118
` () => (1,2,3) ` is a macro that expands to a syntax errror).
119
119
120
120
Except for permissibility of ` $name ` (and ` $(...)* ` , discussed below), the
121
- right-hand side of a macro definition follows the same rules as ordinary
122
- Rust syntax. In particular, macro invocations (including invocations of the
123
- macro currently being defined) are permitted in expression, statement, and
124
- item locations.
121
+ right-hand side of a macro definition is ordinary Rust syntax. In particular,
122
+ macro invocations (including invocations of the macro currently being defined)
123
+ are permitted in expression, statement, and item locations. However, nothing
124
+ else about the code is examined or executed by the macro system; execution
125
+ still has to wait until runtime.
125
126
126
127
## Interpolation location
127
128
0 commit comments