@m_seki の

I like ruby tooから引っ越し

没になった方の直積

前回のバージョンよりもずっとわかりにくいと評判が悪かった方の実装もさらします。「<<」が「*」だったのですが、それもまた評判が悪かったです。

class Product
  def self.<<(ary)
    self.new(ary)
  end

  def initialize(ary, parent=[[]])
    @ary = ary
    @parent = parent
  end

  def <<(ary)
    self.class.new(ary, self)
  end

  def each
    @parent.each do |left|
      @ary.each do |right|
        yield(left + [right])
      end
    end
  end
end

product = Product << ['q1'] <<  [1, 2] <<  ['q2'] << ['a', 'b'] <<  ['q3'] << [1, 3, 5]
product.each do |x|
  p x
end