Я думаю, что сломанный цикл можно сделать в старомодном стиле цикла с break
или что-то вроде этого:
n = 5
[1,2,3,4,5,6,7].take_while { |e| n -= 1; n >= 0 && e < 7 }
В функциональном языке это будет рекурсия, но без TCO это не сделаетв Ruby много смысла.
ОБНОВЛЕНИЕ
take_while
- глупая идея, как указал dbenhur, поэтому я не знаю ничего лучше, чем цикл.