ПРИМЕЧАНИЕ: 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 - это итерация по массиву или коллекции, а не использование длины массива и итерация с целочисленным индексом. Однако в этом примере я действительно имею дело со списком целых чисел. :)