Что означает синтаксис [* a..b] в Ruby?

ПРИМЕЧАНИЕ: splat mischa на GitHub имеет множество интересных интерактивных примеров * в действии.

Путем поиска я обнаружил, что один из способов перебора диапазона чисел в Ruby (ваш классический цикл for в стиле C)

for (i = first; i <= last; i++) {
  whatever(i);
}

- это сделать что-то вроде этого

[*first..last].each do |i|
  whatever i
end

] Но что именно происходит с синтаксисом [* first..last] ? Я поигрался с irb и увидел следующее:

ruby-1.9.2-p180 :001 > 0..5
 => 0..5 
ruby-1.9.2-p180 :002 > [0..5]
 => [0..5] 
ruby-1.9.2-p180 :003 > [*0..5]
 => [0, 1, 2, 3, 4, 5] 
ruby-1.9.2-p180 :004 > *0..5
SyntaxError: (irb):4: syntax error, unexpected tDOT2, expecting tCOLON2 or '[' or '.'
*0..5
    ^

Все, что я ' Мы читали в Интернете, что унарная звездочка полезна для раскрытия и сворачивания аргументов, передаваемых методу, полезна для списков аргументов переменной длины

def foo(*bar)
  bar 
end

foo 'tater' # => ["tater"]
foo 'tater', 'tot' # => ["tater", "tot"]

, и я понимаю это, но не понимаю, как это применимо к раскрытию, выполняемому в моем приведенный выше пример блока.

Чтобы быть ясным, я знаю, что Ruby Way - это итерация по массиву или коллекции, а не использование длины массива и итерация с целочисленным индексом. Однако в этом примере я действительно имею дело со списком целых чисел. :)

8
задан Jonas 30 December 2012 в 12:23
поделиться