Звездочка в этом контексте называется оператором "splat". Это означает, что вы можете передать несколько параметров вместо них, и блок увидит их как массив.
Я не уверен, как и почему он работает без имени переменной после него (например, foo { |*x, y| puts y }
). Я предполагаю, что это означает, что блок игнорирует все параметры, кроме последнего, который он печатает.