ОБНОВЛЕНИЕ 2 : Для потомков, вот как я решил сделать это (благодаря вкладу Йорга):
100.step(2, -2) do |x|
# my code
end
(Очевидно, что есть много способов сделать это; но, похоже, это самый "рубиновый" способ сделать это, и это именно то, чего я добился.)
ОБНОВЛЕНИЕ : ОК, поэтому я искал step
:
(2..100).step(2) do |x|
# my code
end
Но оказывается, что я не был на 100% откровенен в своем первоначальном вопросе. Я на самом деле хочу перебрать этот диапазон в обратном направлении. К моему удивлению, отрицательный шаг не является законным.
(100..2).step(-2) do |x|
# ArgumentError: step can't be negative
end
Итак: как мне сделать это задом наперед?
Привет, ребята, я совершенно новый для Руби, так что будьте осторожны.
Скажем, я хочу перебрать диапазон четных чисел от 2 до 100; как бы я это сделал?
Очевидно, я мог бы сделать:
(2..100).each do |x|
if x % 2 == 0
# my code
end
end
Но, очевидно (снова), это было бы довольно глупо.
Я знаю, что мог бы сделать что-то вроде:
i = 2
while i <= 100
# my code
i += 2
end
Полагаю, я мог бы написать свой собственный класс, предоставляющий собственный метод each
(?). Я почти уверен, что это будет излишним.
Меня интересуют две вещи:
- Возможно ли сделать это с некоторым изменением стандартного синтаксиса Range (т.е.
(x..y).each
)?
- В любом случае, каков был бы самый идиоматический «Рубиновый способ» для достижения этой цели (используя Range или иначе)? Как я уже сказал, я новичок в языке; поэтому любые рекомендации, которые вы можете предложить о том, как делать вещи в более типичном стиле Ruby, будут очень благодарны.