Функция возврата enumerable
, когда блок не задан, в основном используется при объединении функций из перечислимого класса вместе. Как это:
abc = %w[a b c]
p abc.map.with_index{|item, index| [item, index]} #=> [["a", 0], ["b", 1], ["c", 2]]
редактировать:
Я думаю, что мое собственное понимание этого поведения слишком ограничено, чтобы дать правильное понимание внутренней работы Ruby. Я думаю, самое важное, что следует отметить, это то, что аргументы передаются так же, как и для процедур. Таким образом, если массив передан, он будет автоматически "размазан" (какое-нибудь лучшее слово для этого?). Я думаю, что лучший способ понять это — просто использовать несколько простых функций, возвращающих перечисляемые числа, и начать экспериментировать.
abc = %w[a b c d]
p abc.each_slice(2) #<Enumerator: ["a", "b", "c", "d"]:each_slice(2)>
p abc.each_slice(2).to_a #=> [["a", "b"], ["c", "d"]]
p abc.each_slice(2).map{|x| x} #=> [["a", "b"], ["c", "d"]]
p abc.each_slice(2).map{|x,y| x+y} #=> ["ab", "cd"]
p abc.each_slice(2).map{|x,| x} #=> ["a", "c"] # rest of arguments discarded because of comma.
p abc.each_slice(2).map.with_index{|array, index| [array, index]} #=> [[["a", "b"], 0], [["c", "d"], 1]]
p abc.each_slice(2).map.with_index{|(x,y), index| [x,y, index]} #=> [["a", "b", 0], ["c", "d", 1]]
person
hirolau
schedule
05.12.2013