Enumerable is a Module, not a Class. It can be mixed into other classes, so the Class gains the Methods of the module. Arrays uses Enumerable instead of implementing #inject on its own, so they respond to Enumerables #inject.
As a short presentation, i redefine Enumerable#inspect to do something different (never try this at home!):
···
On Feb 18, 2009, at 4:36 PM, Valentino Lun wrote:
[1,2,3,4,5].inject { |sum,n| sum+n }
The inject method in this case is to calculate the sum of array.
I searched the RDoc. Why the inject method is belongs to Enumerable
Class, but not Array Class?
===
module Enumerable
def inject
puts "hey"
end
end
[1,2,3,4,5].inject { |sum,n| sum+n }
The inject method in this case is to calculate the sum of array.
I searched the RDoc. Why the inject method is belongs to Enumerable
Class, but not Array Class?
The Enumerable module can be shared by many classes. Any class which
implements its own 'each' method can mixin Enumerable and gain a whole
load of functionality.
For example:
class Fib
include Enumerable
def initialize(a,b,count) @a, @b, @count = a, b, count
end
def each @count.times do
yield @a @a, @b = @b, @a+@b
end
end
end
p Fib.new(1,1,10).inspect
p Fib.new(1,1,10).max
p Fib.new(1,1,10).inject(0) { |sum,n| sum+n }