From: Rein Henrichs Date: 2010-06-07T10:25:05+09:00 Subject: Re: inject method of Array class On 2010-06-06 17:55:58 -0700, David A. Black said: > Hi -- > > On Mon, 7 Jun 2010, Rein Henrichs wrote: > >> In addition to the previously mentioned difference between #methods and >> #instance_methods, #inject is actually a method on the Enumerable module, >> which is mixed into Array (and other classes that have #each). The Enumerable >> module is full of methods that can be used on "things that can enumerate >> themselves", like Arrays, Hashes and Sets. > > Although a surprising (to me) number of Enumerable's instance methods > are overridden in Array: > > irb(main):008:0> (Array.instance_methods(false) & > Enumerable.instance_methods).sort > => ["collect", "count", "cycle", "drop", "drop_while", "find_index", > "first", "include?", "map", "reject", "reverse_each", "select", > "sort", "take", "take_while", "to_a", "zip"] > > (That's 1.8.7 but the list is the same in 1.9.1.) > > > David I suspect that the majority are overwritten for performance reasons, although some of them surprise me as well. A linked list, for instance, would have a constant time #count because that state is kept on the list object and doesn't require an O(n) enumeration of the members. -- Rein Henrichs http://puppetlabs.com http://reinh.com