diff options
author | Araq <rumpf_a@web.de> | 2012-06-21 08:46:56 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2012-06-21 08:46:56 +0200 |
commit | 7b4560337b3489ba2364fe97066c79d8a23dad87 (patch) | |
tree | f05d0a51cd2679272589cbcd529141fb68c02a2a /tests/run | |
parent | 00feaa2530b0f3623a488d77603045c327805b05 (diff) | |
download | Nim-7b4560337b3489ba2364fe97066c79d8a23dad87.tar.gz |
bugfixes for closures
Diffstat (limited to 'tests/run')
-rw-r--r-- | tests/run/tfilter.nim | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/run/tfilter.nim b/tests/run/tfilter.nim new file mode 100644 index 000000000..e82d05742 --- /dev/null +++ b/tests/run/tfilter.nim @@ -0,0 +1,28 @@ +discard """ + output: "02468101214161820" +""" + +proc filter[T](list: seq[T], f: proc (item: T): bool {.closure.}): seq[T] = + result = @[] + for i in items(list): + if f(i): + result.add(i) + +let nums = @[0, 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] + +when true: + let nums2 = filter(nums, + (proc (item: int): bool = + result = (item mod 2) == 0) + ) + +proc outer = + # lets use a proper closure this time: + var modulo = 2 + let nums2 = filter(nums, + (proc (item: int): bool = result = (item mod modulo) == 0) + ) + + for n in nums2: stdout.write(n) + +outer() |