Я думаю, что лучший способ понять это — посмотреть, что происходит в irb
.
Итак, давайте инициализируем пустой хеш, @catch
:
>> @catch = {}
=> {}
>> @catch.class
=> Hash
Теперь давайте посмотрим, что происходит, когда параметр catch
принимает значение по умолчанию 404
:
>> catch=404
=> 404
>> [*catch].each { |status| @catch[status] = true }
=> [404]
>> @catch[404]
=> true
Это дает нам лучшее представление о том, что происходит. Мы видим, что оператор splat
используется для построения Hash
ответов. Номера ответов используются как key
, а true устанавливается как 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/
person
jluebbert
schedule
13.09.2009