ОБНОВЛЕНИЕ 2: Для потомства это - то, как я обосновался на выполнении его (благодаря входу Jorg):
100.step(2, -2) do |x|
# my code
end
(Очевидно, существует много способов сделать это; но это кажется, что это - большая часть "Ruby" способ сделать это; и это точно, чем я был после.)
ОБНОВЛЕНИЕ: хорошо, поэтому то, что я искал, было step
:
(2..100).step(2) do |x|
# my code
end
Но оказывается, что я не был 100%-м приближением в своем исходном вопросе. Я на самом деле хочу выполнить итерации по этому диапазону назад. К моему удивлению отрицательный шаг не законен.
(100..2).step(-2) do |x|
# ArgumentError: step can't be negative
end
Так: как я делаю это назад?
Эй парни, я абсолютно плохо знаком с Ruby, так быть нежным.
Скажите, что я хочу выполнить итерации по диапазону четных чисел от 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
метод (?). Я почти уверен, что это было бы излишеством, все же.
Я интересуюсь двумя вещами:
(x..y).each
)?Вы не можете объявить Диапазон
с "шагом". У диапазонов нет шагов, у них просто есть начало и конец.
Вы, конечно, можете итерировать по Range
с шагом, например, так:
(2..100).step(2).reverse_each(&method(:p))
Но если вы хотите только итерировать, то для чего вам вообще нужен Range
? Почему бы просто не выполнить итерацию?
100.step(2, -2, &method(:p))
Преимущество этого метода в том, что в отличие от reverse_each
ему не нужно генерировать промежуточный массив.
Этот вопрос отвечает на ваш: о диапазоне рубинов?
(2..100).step(2) do |x|
# your code
end