Ruby is more dynamic in nature. 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] p a2 => [:before, [:first, :second, :third, :fourth], :after] p a2.flatten => [:before, :first, :second, :third, :fourth, :after] a1 = [:first, :second, :third, :fourth] a2 = [:before, *a1, :after] p a2 => [:before, :first, :second, :third, :fourth, :after] x, y, z = 1, 2, 3 p x, y, z a1 = [:first, :second, :third, :fourth] x, y, z = *a1 p x, y, z a1 = [:first, :second, :third, :fourth] x, y, z = :before, *a1 p x, y, z a1 = [:first, :second, :third, :fourth] *x, y, z = *a1 p *x, y, z a1 = [:first, :second, :third, :fourth] x, *y, z = *a1 p x, *y, z This is the common practice that we used with methods parameter a1 = [:first, :second, :third, :fourth] x, y, *z = *a1 p x, y, *z a1 = [:first, :second, :third, :fourth] first, *rest = *a1 p first, *rest def sum3(x, y, z) x + y + z end triangle = [1,2,3] p sum3(*triangle) def greet(greeting, *names) names.each do |name| p " {greeting}!! {name} " end end greet('Good Morning', 'Vinay', 'John', '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