nim-by-example/content/procvars.md
2014-12-11 17:04:49 -05:00

29 lines
No EOL
763 B
Markdown

---
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.
``` nimrod
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)
```
``` console
$ 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.
``` nimrod
proc greaterThan32(x: int): bool {.procvar.} = x > 32
echo powersOfTwo.filter(greaterThan32)
```