Распространение L-значения
В этом случае может быть выделено не более одного l-значения.присваивается массив, состоящий из оставшихся значений, в которых отсутствуют соответствующие значения.Если крайнее правое значение l равно значению, оно потребляет все значения, которые еще не были соединены со значениями l.Если за разделенным lvalue следуют другие lvalue, он потребляет как можно больше rvalue, в то же время позволяя следующим lvalue получить свои значения:
*a = 1
a #=> [1]
a, *b = 1, 2, 3, 4
a #=> 1
b #=> [2, 3, 4]
a, *b, c = 1, 2, 3, 4
a #=> 1
b #=> [2, 3]
c #=> 4
Пустой Splat
Значение может состоять из единственной звездочки (U + 002A) без какого-либо связанного идентификатора.Он ведет себя так, как описано выше, но вместо присвоения соответствующих r-значений разделенному l-значению он отбрасывает их.
a, *, b = *(1..5)
a #=> 1
b #=> 5
Splatting-R-значение
Когда r-значение равноразделенный на части он преобразуется в массив с помощью Kernel.Array (), элементы которого сами по себе становятся значениями.
a, b = *1
a #=> 1
b #=> nil
a, b = *[1, 2]
a #=> 1
b #=> 2
a, b, c = *(1..2), 3
a #=> 1
b #=> 2
c #=> 3