The splat operator gathers extra positional arguments into an array.

splat argument `*args` captures any number of positional values passed to a method.

Splat Arguments

extra
splat_arguments.rb
Replay: real traced execution (multi-file project)
def total(*numbers)
  numbers.sum
end

extra = 4
values = [2, 3, extra]
result = total(*values)

puts "values=#{values.join(",")}"
puts "count=#{values.length}"
puts "total=#{result}"
def total(*numbers)
  numbers.sum
end

extra = 1
values = [2, 3, extra]
result = total(*values)

puts "values=#{values.join(",")}"
puts "count=#{values.length}"
puts "total=#{result}"
def total(*numbers)
  numbers.sum
end

extra = 10
values = [2, 3, extra]
result = total(*values)

puts "values=#{values.join(",")}"
puts "count=#{values.length}"
puts "total=#{result}"
  1. extra ← 4, values ← [2, 3, 4]

    5extra→ 4 = 4  #@extra=1, 106values→ [2, 3, 4] = [2, 3, extra4]7result = total(*values[2, 3, 4])
  2. def total(*numbers)

    1def total(*numbers[2, 3, 4])2  numbers.sum93end
  3. result ← 9

    6values = [2, 3, extra]7result→ 9 = total(*values[2, 3, 4])89puts "values=#{values.join(",")2,3,4}"10puts "count=#{values.length3}"11puts "total=#{result9}"
    outputvalues=2,3,4
    count=3
    total=9
  1. extra ← 1, values ← [2, 3, 1]

    5extra→ 1 = 16values→ [2, 3, 1] = [2, 3, extra1]7result = total(*values[2, 3, 1])
  2. def total(*numbers)

    1def total(*numbers[2, 3, 1])2  numbers.sum63end
  3. result ← 6

    6values = [2, 3, extra]7result→ 6 = total(*values[2, 3, 1])89puts "values=#{values.join(",")2,3,1}"10puts "count=#{values.length3}"11puts "total=#{result6}"
    outputvalues=2,3,1
    count=3
    total=6
  1. extra ← 10, values ← [2, 3, 10]

    5extra→ 10 = 106values→ [2, 3, 10] = [2, 3, extra10]7result = total(*values[2, 3, 10])
  2. def total(*numbers)

    1def total(*numbers[2, 3, 10])2  numbers.sum153end
  3. result ← 15

    6values = [2, 3, extra]7result→ 15 = total(*values[2, 3, 10])89puts "values=#{values.join(",")2,3,10}"10puts "count=#{values.length3}"11puts "total=#{result15}"
    outputvalues=2,3,10
    count=3
    total=15