Improve enumerate macro (#8819)
* fix case macro manual entry to produce code block Previously line breaks were so weird that the code blocks were not created. * improve `enumerate` for loop macro by wrapping in block
This commit is contained in:
parent
2f7b979e38
commit
47c7fd037e
1 changed files with 12 additions and 8 deletions
|
|
@ -5459,12 +5459,17 @@ type ``system.ForLoopStmt`` can rewrite the entirety of a ``for`` loop:
|
||||||
newFor.add x[^2][1]
|
newFor.add x[^2][1]
|
||||||
newFor.add body
|
newFor.add body
|
||||||
result.add newFor
|
result.add newFor
|
||||||
|
# now wrap the whole macro in a block to create a new scope
|
||||||
|
result = quote do:
|
||||||
|
block: `result`
|
||||||
|
|
||||||
for a, b in enumerate(items([1, 2, 3])):
|
for a, b in enumerate(items([1, 2, 3])):
|
||||||
echo a, " ", b
|
echo a, " ", b
|
||||||
|
|
||||||
for a2, b2 in enumerate([1, 2, 3, 5]):
|
# without wrapping the macro in a block, we'd need to choose different
|
||||||
echo a2, " ", b2
|
# names for `a` and `b` here to avoid redefinition errors
|
||||||
|
for a, b in enumerate([1, 2, 3, 5]):
|
||||||
|
echo a, " ", b
|
||||||
|
|
||||||
|
|
||||||
Currently for loop macros must be enabled explicitly
|
Currently for loop macros must be enabled explicitly
|
||||||
|
|
@ -5474,12 +5479,11 @@ via ``{.experimental: "forLoopMacros".}``.
|
||||||
Case statement macros
|
Case statement macros
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
A macro that needs to be called `match`:idx: can be used to
|
A macro that needs to be called `match`:idx: can be used to rewrite
|
||||||
rewrite ``case`` statements in order to
|
``case`` statements in order to implement `pattern matching`:idx: for
|
||||||
implement `pattern matching`:idx: for certain types. The following
|
certain types. The following example implements a simplistic form of
|
||||||
example implements a simplistic form of pattern matching for tuples,
|
pattern matching for tuples, leveraging the existing equality operator
|
||||||
leveraging the existing equality operator for tuples (as provided in
|
for tuples (as provided in ``system.==``):
|
||||||
``system.==``):
|
|
||||||
|
|
||||||
.. code-block:: nim
|
.. code-block:: nim
|
||||||
:test: "nim c $1"
|
:test: "nim c $1"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue