From: Christoph Rippel Date: 2001-01-10T07:45:05+09:00 Subject: [ruby-talk:8962] Re: Modules and mixins > -----Original Message----- > From: Ben Tilly [mailto:ben_tilly@hotmail.com] > Sent: Tuesday, January 09, 2001 03:52 AM > To: ruby-talk ML > Subject: [ruby-talk:8917] Re: Modules and mixins ... > Say no more. Explicit calculations open up room for all > sorts of potential mistakes. they are also very inefficient and are either (virtually) impossible or absurdly complex if you start adding additional ``if clauses'' etc. ... > > ... > Not much of a trick. I just intended to use argument if you know it .... > processsing to do what would otherwise be mechanical in > my original Perl version. ... > my solution. I think I like the pattern of this one > better, just a tad more direct. However I would > prefer different names: On the other hand your solution is more fun and you can replace the final ``[]'' with the mandatory ``[6,6,6]''. Seriously it is probably a good idea to distribute the argument pre-processing (in both solutions) over two function calls, lets say along the lines of class Array def multi_each # or each_comb, iter_each ... __e(*self) {|arg| yield arg } unless empty? end private def __e (arg,*more_args) (more_args.empty?) ? arg.each { |r| yield [r] } : arg.each {|l| __e(*more_args) {|r| yield [l]+ r }} end end [1...3,'a'..'c', ('A'..'D').to_a].multi_each \ { |arg| puts arg.join " " } [].multi_each \ { |arg| puts "nothing" } This is sort of complementary to the proposed ``zip'' (not that I am suggesting to include this in the Array interface). Christoph