[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?
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!):
===
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 }
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.