763 B
763 B
| title |
|---|
| First Class Functions |
First Class Functions
Nim supports closures as well as passing functions. Two different syntaxes available for closures, proc syntax, which is identical to regular procedure syntax, and "do notation", which is a bit shorter.
import sequtils
let powersOfTwo = @[1, 2, 4, 8, 16, 32, 64, 128, 256]
echo powersOfTwo.filter do (x: int) -> bool : x > 32
echo powersOfTwo.filter(proc (x: int): bool = x > 32)
$ nim c -r filterclosure.nim
@[64, 128, 256]
@[64, 128, 256]
Existing procedures can also be passed as functions, but only if they are annotated with the {.procvar.} pragma.
proc greaterThan32(x: int): bool {.procvar.} = x > 32
echo powersOfTwo.filter(greaterThan32)