On Mon, Nov 20, 2006 at 06:16:17AM +0900, Avi S g wrote:
> I wrote a simple version of the collect method for the Array class 
> called my_collect. Here is what I wrote:
> 
> class Array
>   def my_collect
>     result = []
>     self.each {|element| result.push(yield(element))}
>     result
>   end
> end
> 
> x = [1,2,3].my_collect {|element| element + 1}
> print x
> 
> It prints out 234 correctly. However, I was puzzled by what x contained 
> if I removed the return value 'result', that is:
> 
> class Array
>   def my_collect
>     result = []
>     self.each {|element| result.push(yield(element))}
>     #Removed return value
>   end
> end
> 
> x = [1,2,3].my_collect {|element| element + 1}
> print x
> 
> It prints out 123. Why? The last evaluated expression would probably be 
> result.push(yield(3)), and since push returns the resulting array, 
> wouldn't it be 234 in this case as well?
> 
x.each { } by convention returns x. In other words, it's as if
Array#each was defined like so:

class Array
  def my_each
     i = 0
     while i < self.length
       yield( self[i] )
       i += 1
     end
     self # last evaluated expression for each is here.
  end
end

> Thanks,
> FeralHound
> 
> -- 
> Posted via http://www.ruby-forum.com/.