Я только что видел этот код (упрощенно):
def something
yield(key1: 1, key2: 2)
end
something { |key1: key1, key2: key2| puts "key1:#{key1}, key2:#{key2}" }
# (irb):351: warning: circular argument reference - key1
# (irb):351: warning: circular argument reference - key2
# key1:1, key2:2
Как и ожидалось, есть круговая ссылка ... но подождите секунду! key1
и key2
определены правильно!
Хорошо, значит, они были определены ранее, это означает, что я могу полностью избавиться от ха sh, верно?
something { |key1, key2| puts "key1:#{key1}, key2:#{key2}" }
# key1:{:key1=>1, :key2=>2}, key2:
Нет, круговая ссылка великолепна! но ... параллельное присваивание не работает, первая переменная получает целое га sh.
Итак, я попытался очистить вещи немного больше:
something { |key1: nil, key2: nil| puts "key1:#{key1}, key2:#{key2}" }
# key1:1, key2:2
Теперь это работает , Но зачем вообще нужны эти значения по умолчанию?
Что именно здесь происходит? Есть ли лучший способ перебора списка хешей, расширяющих их? Также приветствуются указатели на документацию.