David Kastrup
11/19/2006 9:22:00 PM
Avi S g <avishek.sen.gupta@gmail.com> writes:
> 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)),
No. The last evaluated block of self.each would be
result.push(yield(3)), but each does not return the last evaluated
block, but rather the original array.
> and since push returns the resulting array, wouldn't it be 234 in
> this case as well?
No.
--
David Kastrup, Kriemhildstr. 15, 44793 Bochum