Разрушение.
location=
принимает один параметр.Предполагается, что этот параметр является массивом, и он структурирован так, что первый элемент массива переходит в filename
, а второй в lineno
.Внешние скобки - это нормальные (обычно необязательные) скобки определения метода;внутренние скобки указывают структуру первого (и единственного) параметра.
Вот еще один пример разрушения на работе:
{ foo: 17, bar: 34 }.each.with_index { |(key, value), index|
p [key, value, index]
}
# => [:foo, 17, 0]
# [:bar, 34, 1]
Hash#each
генерирует пары [key, value]
;Enumerator#with_index
генерирует пары [value, index]
.Примените их оба, и вы получите [[key, value], index]
, переданный в блок.Мы могли бы просто сделать это:
{ foo: 17, bar: 34 }.each.with_index { |pair, index|
key = pair[0]
value = pair[1]
p [key, value, index]
}
, но это намного проще с деструктуризацией.Мы могли бы даже написать (key, value) = pair
(или key, value = pair
, так как массивы с одним значением автоматически деструктурируются при назначении с несколькими значениями) в качестве другого примера разрушения.