From: Justin Collins Date: 2009-01-07T14:51:25+09:00 Subject: Re: difference between *options and options Sijo Kg wrote: > Hi > I saw below code > > options = { :a => 1, :b => 2, :c => 3 } > rejects = Hash[*options.select { |k, v| k == :b && options.delete(k) > }.flatten] > > In the above if I use options insted of *options what is actually > happening..I would like to know their difference What actually means > *options > > Thanks in advance > Sijo > This code might be a little deceptive, but if you look closely "options.select { |k, v| k == :b && options.delete(k)}.flatten" is just creating an array out of selected keys and values. After that, the splat operator (*) is being used to turn the array into parameters for the Hash.[] function...which turns it back into a hash. Tada! I note that in Ruby 1.9.1, Hash#select returns a hash, making this weirdness unnecessary. More about splat, including this particular use: http://advent2008.hackruby.com/past/2008/12/12/meet_the_splat/ -Justin