Ruby is more dynamic in nature. So Let’s see …

a1 = [:first, :second, :third, :fourth]  #=> [:first, :second, :third, :fourth]
a1 = :first, :second, :third, :fourth    #=> [:first, :second, :third, :fourth]
a1 = [:first, :second, :third, :fourth]
a2 = [:before, a1, :after]
a2  #=> [:before, [:first, :second, :third, :fourth], :after]
a2.flatten  #=> [:before, :first, :second, :third, :fourth, :after]

Nice Ahh!!! …

a1 = [:first, :second, :third, :fourth]
a2 = [:before, *a1, :after]
 #=> [:before, :first, :second, :third, :fourth, :after]
x, y, z = 1, 2, 3
p x #=> 1 
p y #=> 2
p z #=> 3

Wooo Wooo….

a1 = [:first, :second, :third, :fourth]
x, y, z = *a1
p x #=> :first
p y #=> :second
p z #=> :third
a1 = [:first, :second, :third, :fourth]
x, y, z = :before, *a1
p x #=> :before 
p y #=> :first
p z #=> :second 

But wait, there’s more….

a1 = [:first, :second, :third, :fourth]
*x, y, z =  *a1
p *x #=> [:first, :second]
p y  #=> :third
p z  #=> :fourth
a1 = [:first, :second, :third, :fourth]
x, *y, z =  *a1
p x  #=> :first
p *y #=> [:second, :third]
p z  #=> :fourth

This is the common practice that we used with methods parameter.

a1 = [:first, :second, :third, :fourth]
x, y, *z =  *a1
p x  #=> :first 
p y  #=> :second
p *z #=> [:third, :fourth]
a1 = [:first, :second, :third, :fourth]
first, *rest = *a1
p first #=> :first
p *rest #=> [:second, :third, :fourth]    

Where am I going with this? Stay with me here.

def sum3(x, y, z)
  x + y + z
end

triangle = [1,2,3]
p sum3(*triangle) #=> 6
def greet(greeting, *names)
  names.each do |name|
    p "#{greeting}! #{name}"
  end
end
greet('Good Morning', 'Vinay', 'John', 'Shane')

#=> "Good Morning! Vinay"
#=> "Good Morning! John"
#=> "Good Morning! Shane"
def randon_draw(num_times, num_draws)
  num_times.times do
    draws = num_draws.times.map{ rand(10)}
    yield(*draws)
  end
end

randon_draw(5, 3) do |first, *rest|
  p "#{first} #{rest}"
end
#=> "1 [7, 3]"
#=> "4 [5, 2]"
#=> "5 [1, 7]"
#=> "2 [9, 2]"
#=> "8 [9, 1]"