On 10/30/05, Trans <transfire / gmail.com> wrote: > Hi Ryan, > > I didn't modify a core class. EnumerableArgs is a complete rewrite of > Enumerable and stands on it own. Sorry I was ambiguous. In the ObjectSpace example you modify a core class: class << ObjectSpace include EnumerableArgs alias :each, :each_object end ObjectSpace.select(Class) { |c| c.name =~ /^S/ } Though this modification is less troublesome than other kinds of changes. > The Enumerator approach lacks for a few reasons. > > 1. Its' longer and less readable. Here is the code from Pit: require "enumerator" ObjectSpace.enum_for(:each_object, Class).select { |c| c.name =~ /^S/ } How is that longer than your example above? If the unneeded whitespace is removed from both, your example is about 50 characters longer (this is ignoring the needed "require" line, since your example lacks it.) And maybe I'm "in too deep" in understanding Ruby, but I find the above very readable (but I also find inject easy to understand now too, so...) And while your example is also pretty easy to read, it requires some knowledge as to what EnumerableArgs is, since the name isn't totally obvious. > 2. It's creates an intermedeary object. Fair enough. > 4. It means Enumerable remains less useful. What happened to number 3? ;) I'm not arguing that the code you made doesn't have some merit, I just don't agree that it is any better than the enumerator example. > While Enumerator may have it's uses, I do not find it's use here > "Ruby-esque", for much the same reason David disliked #every --I have > to agree. Well it seems the perspective of something being "Ruby-esque" is quite subjective, since I find the enumerator example quite "Ruby-esque." Regards, Ryan