From: Alex DeCaria Date: 2010-03-17T11:43:01+09:00 Subject: Re: array.each Phillip Curry wrote: > I want to take an array of strings and convert each member to an > integer. > array.to_i obviously doesn't work. > I tried array.each { |x| x = x.to_i } and that doesn't work either. > aray.each_index { |x| array[x] = array[x].to_i } works fine. I'm > finding > that pretty much every time I try to use each, each_index works better. > Why > doesn't each work here, is there anything I can do about it, and is > there > anything in particular that each does better than each_index or should I > just drop it entirely? > > thanks > phil The issue is one of scope of local variables. x is a block parameter, and is local to the block. That is why when you change the value of x within the block, it has no affect on array. Each time the block executes, the value of an element in array is copied to x, but changing x doesn't change the value of array. The .each_index method works because array was initialized outside of the block and is available within within the block itself (but x itself is still local to the block). There are times when .each is appropriate, but for what you are doing, .each_index is what you need. -Alex -- Posted via http://www.ruby-forum.com/.