From: Michael Neumann Date: 2004-10-21T03:05:37+09:00 Subject: each with separator Hi, I know we had a similar thread in the past about first/last-element detection. In Smalltalk there's #do:separateBy: which basically works like each+join combined, but in an imperative fashion. Now I tried to implement: [1,2,3].separate_by { puts "-" }.each {|obj| puts obj } desired output: 1 - 2 - 3 This is how I thought it would work: require 'generator' module Enumerable def separate_by(&block) last = size - 1 Generator.new {|g| each_with_index {|obj, inx| g.yield obj block.call if inx < last } } end end But the output is as follows: - 1 - 2 3 g.yield does not actually stop until an item is consumed. Any idea how to solve this? Regards, Michael