Adds convenience mapIt templates.
This commit is contained in:
parent
c30f6cfcf1
commit
700f32e814
1 changed files with 39 additions and 0 deletions
|
|
@ -276,6 +276,38 @@ template foldr*(sequence, operation: expr): expr =
|
||||||
result = operation
|
result = operation
|
||||||
result
|
result
|
||||||
|
|
||||||
|
template mapIt*(seq1, typ, pred: expr): expr =
|
||||||
|
## Convenience template around the ``map`` proc to reduce typing.
|
||||||
|
##
|
||||||
|
## The template injects the ``it`` variable which you can use directly in an
|
||||||
|
## expression. You also need to pass as `typ` the type of the expression,
|
||||||
|
## since the new returned sequence can have a different type than the
|
||||||
|
## original. Example:
|
||||||
|
##
|
||||||
|
## .. code-block:: nimrod
|
||||||
|
## let
|
||||||
|
## nums = @[1, 2, 3, 4]
|
||||||
|
## strings = nums.mapIt(string, $(4 * it))
|
||||||
|
var result {.gensym.}: seq[typ] = @[]
|
||||||
|
for it {.inject.} in items(seq1):
|
||||||
|
result.add(pred)
|
||||||
|
result
|
||||||
|
|
||||||
|
template mapIt*(varSeq, pred: expr) =
|
||||||
|
## Convenience template around the mutable ``map`` proc to reduce typing.
|
||||||
|
##
|
||||||
|
## The template injects the ``it`` variable which you can use directly in an
|
||||||
|
## expression. The expression has to return the same type as the sequence you
|
||||||
|
## are mutating. Example:
|
||||||
|
##
|
||||||
|
## .. code-block:: nimrod
|
||||||
|
## var nums = @[1, 2, 3, 4]
|
||||||
|
## nums.mapIt(it * 3)
|
||||||
|
## assert nums[0] + nums[3] == 15
|
||||||
|
for i in 0 .. <len(varSeq):
|
||||||
|
let it {.inject.} = varSeq[i]
|
||||||
|
varSeq[i] = pred
|
||||||
|
|
||||||
when isMainModule:
|
when isMainModule:
|
||||||
import strutils
|
import strutils
|
||||||
block: # concat test
|
block: # concat test
|
||||||
|
|
@ -381,4 +413,11 @@ when isMainModule:
|
||||||
Inserting [2,2,2,2,2,2] into [1,1,1,1,1,1,1,1]
|
Inserting [2,2,2,2,2,2] into [1,1,1,1,1,1,1,1]
|
||||||
at 3 is [1,1,1,2,2,2,2,2,2,1,1,1,1,1]"""
|
at 3 is [1,1,1,2,2,2,2,2,2,1,1,1,1,1]"""
|
||||||
|
|
||||||
|
block: # mapIt tests
|
||||||
|
var
|
||||||
|
nums = @[1, 2, 3, 4]
|
||||||
|
strings = nums.mapIt(string, $(4 * it))
|
||||||
|
nums.mapIt(it * 3)
|
||||||
|
assert nums[0] + nums[3] == 15
|
||||||
|
|
||||||
echo "Finished doc tests"
|
echo "Finished doc tests"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue