On Dec 27, 2010, at 09:25 , jzakiya wrote:
require “ap”
but these aren’t
%w/lib1 lib2 lib3/.inject :require
%w/lib1 lib2 lib3/.inject 0, :require
1887 % ri Enumerable.inject
= Enumerable.inject
(from ruby core)
enum.inject(initial, sym) => obj
enum.inject(sym) => obj
enum.inject(initial) {| memo, obj | block } => obj
enum.inject {| memo, obj | block } => obj
enum.reduce(initial, sym) => obj
enum.reduce(sym) => obj
enum.reduce(initial) {| memo, obj | block } => obj
enum.reduce {| memo, obj | block } => obj
Combines all elements of enum by applying a binary operation,
specified by a block or a symbol that names a method or operator.
If you specify a block, then for each element in enum
the block is passed an
accumulator value
(memo) and the element. If you specify a symbol instead,
then each element in the collection will be passed to the named method
of
memo. In either case, the result becomes the new value for
memo. At the end of the iteration, the final value of memo is
the return value fo the method.
If you do not explicitly specify an initial value for
memo, then uses the first element of collection is used as the initial
value of memo.
Examples:
Sum some numbers
(5…10).reduce(:+) #=> 45
Same using a block and inject
(5…10).inject {|sum, n| sum + n } #=> 45
Multiply some numbers
(5…10).reduce(1, :*) #=> 151200
Same using a block
(5…10).inject(1) {|product, n| product * n } #=> 151200
find the longest word
longest = %w{ cat sheep bear }.inject do |memo,word|
memo.length > word.length ? memo : word
end
longest #=> “sheep”