Forum: Ruby newbie question about blocks

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Jeppe J. (Guest)
on 2006-02-12 23:50
(Received via mailing list)
Hi, I want to square every element in my array using a block:

a = (1..1000).to_a
a.each {|x| x**2}

But this does not seem to work, it just outputs my array completely
unchanged :(
unknown (Guest)
on 2006-02-12 23:54
(Received via mailing list)
Hi --

On Mon, 13 Feb 2006, Jeppe J. wrote:

> Hi, I want to square every element in my array using a block:
>
> a = (1..1000).to_a
> a.each {|x| x**2}
>
> But this does not seem to work, it just outputs my array completely
> unchanged :(

What you want is map, rather than each:

   a.map {|x| x**2 }

each just returns the receiver (i.e., the array itself).  map returns
a new array, composed of the results obtained by running the block
once for each item.

"collect" is a synonym for map.


David

--
David A. Black (removed_email_address@domain.invalid)
Ruby Power and Light (http://www.rubypowerandlight.com)

"Ruby for Rails" chapters now available
from Manning Early Access Program! http://www.manning.com/books/black
Daniel N. (Guest)
on 2006-02-12 23:56
(Received via mailing list)
The problem you're seeing is that :each doesn't do anything with the
return values of the block.

What you want is :map or :collect (or their destructive forms :map! or
:collect!).
Timothy H. (Guest)
on 2006-02-13 00:03
(Received via mailing list)
Jeppe J. wrote:
>
The collect method will produce a new array:

a.collect {|x| x*x}

or, if you want to modify the original array, use collect!
unknown (Guest)
on 2006-02-13 00:34
(Received via mailing list)
Hi --

On Mon, 13 Feb 2006, Daniel N. wrote:

> return values of the block.
>
> What you want is :map or :collect (or their destructive forms :map! or
> :collect!).

But probably the methods, not the like-named symbols :-)


David

--
David A. Black (removed_email_address@domain.invalid)
Ruby Power and Light (http://www.rubypowerandlight.com)

"Ruby for Rails" chapters now available
from Manning Early Access Program! http://www.manning.com/books/black
This topic is locked and can not be replied to.