Возможно, пример выбран неправильно, но ваш конкретный пример такой же, как:
[1,2,3,4].reject &:even?
Открытие и изменение блока кажутся мне запахом кода. Было бы сложно написать так, чтобы побочные эффекты были очевидны.
Учитывая ваш пример, я думаю, что комбинация функций более высокого порядка сделает то, что вы хотите решить.
Обновление : Это не то же самое, как указано в комментариях. [1,2,3,4].reject(&:even?)
смотрит на содержимое, а не на индекс (и возвращает [1,3], а не [2,4], как это было бы в вопросе). Нижеприведенный пример эквивалентен исходному примеру, но не сильно отличается.
[1,2,3,4].each_with_index.reject {|element, index| index.even? }.map(&:first)