From: Phillip Curry on
[Note: parts of this message were removed to make it a legal post.]

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

From: Gary Wright on

On Mar 16, 2010, at 10:02 AM, 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.

=> a = %w{1 2 3 4}
=> ["1", "2", "3", "4"]
>> a.map! { |x| x.to_i }
=> [1, 2, 3, 4]
>>


From: Phillip Curry on
[Note: parts of this message were removed to make it a legal post.]

that looks just about right

On Tue, Mar 16, 2010 at 10:07 PM, Gary Wright <gwtmp01(a)mac.com> wrote:

>
> On Mar 16, 2010, at 10:02 AM, 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.
>
> => a = %w{1 2 3 4}
> => ["1", "2", "3", "4"]
> >> a.map! { |x| x.to_i }
> => [1, 2, 3, 4]
> >>
>
>
>

From: Alex DeCaria on
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/.

From: Sam Yang on
Gary Wright wrote:
> On Mar 16, 2010, at 10:02 AM, 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.
>
> => a = %w{1 2 3 4}
> => ["1", "2", "3", "4"]
>>> a.map! { |x| x.to_i }
> => [1, 2, 3, 4]

simply
["1","2"].collect(&:to_i)
--
Posted via http://www.ruby-forum.com/.