bugfixes for closures

This commit is contained in:
Araq
2012-06-21 08:46:56 +02:00
parent 00feaa2530
commit 7b4560337b
7 changed files with 58 additions and 13 deletions

28
tests/run/tfilter.nim Normal file
View File

@@ -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()