Hi,
Let me show you a new method candidate for Enumerable module, which I
named "every". (I might not have implemented it this cleanly without
yashi and znz's help. Thanks much!)
* * *
Enumerable#every(n)
Returns an Enumerable object that yields the iterator block for
every <n> elements. The block is yielded with <n> arguments for
each, and if the number of elements are short by <n> for the last
yield, nil's are filled as necessary.
Example 1:
Enumerate the alphabets for every quartet and select ones that
don't start with vowels:
$ ruby -e 'p (("A".."Z").every(4).find_all{|i| "AEIOU".index(i[0]) == nil})'
[["M", "N", "O", "P"], ["Q", "R", "S", "T"], ["Y", "Z", nil, nil]]
Example 2:
List the files in the current directory in 3-column format:
$ ruby -e 'Dir.open(".").every(3).each{|i| puts "%-20s%-20s%-20s" % i}'
. .. CVS
cygwin djgpp ext
lib misc missing
sample win32 x68
README.EXT.jp .cvsignore COPYING
ChangeLog MANIFEST Makefile
Makefile.in README README.EXT
(snip)
string.o struct.o time.o
util.o variable.o version.o
dmyext.o libruby.a main.o
miniruby rbconfig.rb libruby.so.16
libruby.so ruby
The implementation is available at the following URI:
http://people.FreeBSD.org/~knu/misc/rb_enum_every.diff
Now I'd ask you some questions:
1) Is the name "every" appropriate?
2) Is it worth being integrated to the standard Enumerable class?
Any comments are welcome. Thanks in advance.
--
/
/__ __
/ ) ) ) ) /
Akinori -Aki- MUSHA aka / (_ / ( (__( @ idaemons.org / FreeBSD.org
"We're only at home when we're on the run, on the wing, on the fly"