this.dom.addEventListener("click", function(event) {
self.onclick(event)
}, false);
Я не уверен, что кто-то полностью понимает оператор splat. Много раз он удаляет один уровень "массивности", но не удаляет последний уровень.
По крайней мере, в этом одном случае его можно получить. Он создает один уровень массива для параметра catch независимо от того, является ли catch
одним числом или массивом чисел.
>> t = [*404]
=> [404]
>> t = [*[404,405,406]]
=> [404, 405, 406]
Другой способ взглянуть на это: знак l-значения является жадным и содержит как можно больше соответствующих r-значений.
Я думаю, лучший способ понять это - посмотреть, что происходит в irb
.
Итак, давайте инициализируем пустой хеш, @catch
:
>> @catch = {}
=> {}
>> @catch.class
=> Hash
Теперь посмотрим, что происходит, когда параметр catch
принимает значение по умолчанию 404
:
>> catch=404
=> 404
>> [*catch].each { |status| @catch[status] = true }
=> [404]
>> @catch[404]
=> true
Это дает нам лучшее представление о том, что происходит. Мы видим, что оператор splat
используется для построения хэша
ответов. Номера ответов используются в качестве ключа
, а значение true устанавливается в качестве значения
. Так что независимо от того, сколько элементов у нас есть в catch, мы все равно можем построить хэш
.
>> 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 /