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.