⚠️ This guide has not been actively kept up to date since before Nim 1.0. Many things are still the same, but some things have changed.

Varargs

Standard varargs simply allows you to pass multiple parameters to your function.

proc printThings(things: varargs[string]) =
  for thing in things:
    echo thing

printThings "words", "to", "print"
$ nim c -r ./varargs1.nim
words
to
print

However, trying to run

printThings 1, "string", @[1, 2, 3]

will fail to compile because the compiler won’t coerce anything into strings. Luckily enough, there is a tool to fix this, the coercing varargs:

proc printThings(things: varargs[string, `$`]) =
  for thing in things:
    echo thing

printThings "thing 1", 2, @[4, 5, 6]
$ nim c -r ./varargs2.nim
thing 1
2
@[4, 5, 6]

It works by finding a function `$` that returns string for each argument type, and applying it to each argument.