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/.