Я думаю, что лучший способ понять это - посмотреть, что происходит в irb
.
Итак, давайте инициализируем пустой хеш, @catch
:
>> @catch = {}
=> {}
>> @catch.class
=> Hash
Теперь посмотрим, что произойдет, когда параметр catch
перейдет к значению по умолчанию 404
:
>> catch=404
=> 404
>> [*catch].each { |status| @catch[status] = true }
=> [404]
>> @catch[404]
=> true
Это дает нам лучшее представление о том, что происходит. Мы можем видеть, что оператор splat
используется для создания Hash
ответов. Номера ответов используются как key
, а истина установлена как value
. Поэтому независимо от того, сколько предметов у нас в улове, мы все равно можем построить 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}
Надеюсь, это поможет. Вот ссылка, которая немного помогла мне:
http://theplana.wordpress.com/2007/03/03/ruby-idioms-the-splat-operator/