I think the best way to understand this is to look what is happening in irb
.
So let's initialize an empty hash, @catch
:
>> @catch = {}
=> {}
>> @catch.class
=> Hash
Now let's see what happens when the parameter catch
goes to it's default value of 404
:
>> catch=404
=> 404
>> [*catch].each { |status| @catch[status] = true }
=> [404]
>> @catch[404]
=> true
This gives us a better idea of what is going on. We can see that the splat
operator is being used to build a Hash
of responses. The response numbers are being used as a key
and true is set as the value
. So no matter how many items we have in catch, we can still build a Hash
.
>> catch=[404, 301, 302, 303, 403]
=> [404, 301, 302, 303, 403]
>> [*catch].each { |status| @catch[status] = true }
=> [404, 301, 302, 303, 403]
>> @catch
=> {302=>true, 303=>true, 403=>true, 404=>true, 301=>true}
I hope this helps. Here is a link that helped me out a little bit:
http://theplana.wordpress.com/2007/03/03/ruby-idioms-the-splat-operator/