Ruby/Подробнее об ассоциативных массивах: различия между версиями

Содержимое удалено Содержимое добавлено
Новая: == Подробнее об ассоциативных массивах == Различают два типа массивов: индексные, у которых в качестве ...
 
Строка 47:
Начальный хеш был создан хитроумной комбинацией <code>Hash.new{0}</code>, что в переводе на русский означает примерно следующее: «создадим пустой хеш, в котором любому несуществующему ключу будет соответствовать <code>0</code>». Это нужно, чтобы суммирование (метод <code>+</code>) не выдавало ошибку вида: «не могу сложить <code>nil</code> и число типа <code>Fixnum</code>». В качестве упражнения, предлагаю вам заменить комбинацию <code>Hash.new{ 0 }</code> на <code>{}</code> и посмотреть, чем это чревато.
 
Зачем нужно дописывать <code>result</code>? Дело в том, что комбинация <code>result[i] += i1</code> имеет в качестве результата целое число (учитывая, что массив целочисленный), а не хеш. Следовательно, параметру <code>result</code> автоматически будет присвоено целое число (см. описание итератора <code>.inject</code>). На следующей итерации мы будем обращаться к <code>result</code>, как к хешу, хотя там уже будет храниться число. Хорошо, если программа выдаст ошибку, а если нет? Проверьте это самостоятельно.
 
В качестве упражнения, предлагаю вам переписать программу без вышеописанных двух особенностей (используйте метод <code>.update</code>). Решение будет опубликовано ниже.