Здесь уже есть несколько хороших ответов, поэтому я не собираюсь давать другой. Тем не менее, это может помочь понять, что здесь происходит не так. Каждый блок в Ruby возвращает оценку своего последнего оператора.
Метод times возвращает количество выполненных блоков.
Каждый метод возвращает массив, на котором был запущен блок.
Видишь здесь образец? Большинство из этих методов итератора возвращают то, что было ему передано.
Блоки передаются вызывающей функции почти как аргумент. По сути, это то, что происходит в вашем коде.
block = Proc.new { image_tag("24gray/spacer.png", :class => "spacer")}
def space(spacer_count)
spacer_count.times(&block)
end
Теперь, зная, что итераторы возвращают то, что ему было передано, вы можете понять, почему space (6) возвращает 6