Это называется оператором splat , и он может собирать элементы в массив (примененный к несвязанной переменной) или разбивать массив на отдельные элементы (применяемый к массиву).
def bar(*a)
a[1]
end
bar(1,2,3)
=> 2
def foo(a,b,c)
b
end
foo(*[1,2,3])
=> 2
Это немного упрощенно, прочитайте связанный пост для более подробной информации.