my approach
# 1
itr_bolt = bolts.to_enum
p nuts.map{|nut|assemble nut, itr_bolt.next}
# 2
def parallel(*enums)
return to_enum(__callee__, *enums) unless block_given?
itrs = enums.map(&:to_enum)
begin
loop do
yield(* itrs.map(&:next))
end
rescue StopIteration
self
end
end
p parallel(nuts, bolts).map{|nut, bolt|assemble nut, bolt}
# 3
p [].tap{|r|
nuts.zip(bolts){|tuple|r << assemble(*tuple)}
}
# run
···
--
Posted via http://www.ruby-forum.com/.