From: "Brian Schröder" Date: 2005-09-10T17:50:09+09:00 Subject: Re: Why? Blocks On 09/09/05, Joe Van Dyk wrote: > On 9/8/05, Jamis Buck wrote: > > On Sep 8, 2005, at 8:49 PM, Julian Leviston wrote: > > > > > 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... > > > > b = Proc.new {|aVal| aVal / 5 == 0} > > d = c.select(&b) > > What's the significance of '&b' vs 'b'? > > 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/