Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Why? Blocks

0 views
Skip to first unread message

Julian Leviston

unread,
Sep 8, 2005, 10:49:51 PM9/8/05
to
Why can I not do this:

c = [1,2,3,4,5,6,6,7,8,10]
b = {|aVal| aVal / 5 == 0}
d = c.select(b)

I would like to store sections of code so I don't have to repeat
myself...

Julian.


Jamis Buck

unread,
Sep 8, 2005, 10:52:04 PM9/8/05
to

b = Proc.new {|aVal| aVal / 5 == 0}
d = c.select(&b)

- Jamis

Joe Van Dyk

unread,
Sep 8, 2005, 10:58:10 PM9/8/05
to

What's the significance of '&b' vs 'b'?


David A. Black

unread,
Sep 8, 2005, 11:04:24 PM9/8/05
to
Hi --

&b means that it's serving as the code block for this method call. b
means the Proc object is just a regular argument to the method.


David

--
David A. Black
dbl...@wobblini.net


Bill Kelly

unread,
Sep 8, 2005, 11:06:59 PM9/8/05
to
From: "Joe Van Dyk" <joev...@gmail.com>

> > b = Proc.new {|aVal| aVal / 5 == 0}
> > d = c.select(&b)
>
> What's the significance of '&b' vs 'b'?

It tells ruby that parameter is to take the place
of the block, rather than be passed as one of the
arguments to the method.

Regards,

Bill


Brian Schröder

unread,
Sep 10, 2005, 4:50:09 AM9/10/05
to

There is a similiarity between the star and the ampersand operator. A
star packs and unpacks arrays, while the ampersand packs and unpacks
code. E.g.

$ cat star-ampersand.rb
def another_method(a, b, c)
yield(:a=>a, :b => b, :c => c)
end

def take_block(*args, &block)
another_method(*args, &block)
end

take_block(1,2,3) do | hash | p hash end

$ ruby star-ampersand.rb
{:b=>2, :c=>3, :a=>1}

regards,

Brian


--
http://ruby.brian-schroeder.de/

Stringed instrument chords: http://chordlist.brian-schroeder.de/


Julian Leviston

unread,
Sep 11, 2005, 10:48:06 AM9/11/05
to
You ROCK :-)

Man THANNNNKKKSSSS :)

It's gonna take me a little bit of study to work out blocks, lambdas
and Proc objects! Far out.
But how awesome that Ruby can do that. Awesome! I'm like excited
as... :) Every time I come up against a new problem domain, I get
these awesome answers from these awesome people! {BIG VIRTUAL HUGS}
thanks guys.

Julian.

0 new messages