Variadic Functions in Ruby

Variadic functions can be called with any number of trailing arguments. For example, fmt.Println is a common variadic function.

Here’s a function that will take an arbitrary number of ints as arguments.

def sum(*nums)
  print "#{nums} "
  total = 0

  nums.each do |num|
    total += num
  end
  puts total
end

Within the function, the type of nums is equivalent to Array. We can call nums.length, iterate over it with each, etc.

Variadic functions can be called in the usual way with individual arguments.

sum(1, 2)
sum(1, 2, 3)

If you already have multiple args in an array, apply them to a variadic function using function(*array) like this.

nums = [1, 2, 3, 4]
sum(*nums)

To run the program, simply use ruby to execute the script.

$ ruby variadic-functions.rb
[1, 2] 3
[1, 2, 3] 6
[1, 2, 3, 4] 10

Another key aspect of functions in Ruby is their ability to form closures, which we’ll look at next.