Чтобы объявить значение хеша по умолчанию в Ruby, передайте нужное значение методу Hash #new в качестве аргумента, как показано ниже.
Когда мы вызываем ключи без присвоенных значений в нашем хеше, возвращается значение по умолчанию, 0.
Однако, когда мы назначаем изменяемый объект в качестве значения по умолчанию, например, массив, возникает поведение, которое сложнее анализировать.
В то время как мы могли бы ожидать, что foo[:bar]
теперь будет содержать [0]
, foo
все еще пусто. Что было изменено, так это значение по умолчанию для хеша. Поскольку такое поведение не является ожидаемым и нежелательным в большинстве случаев, уникальные изменяемые объекты могут использоваться в качестве значения по умолчанию для хэша со следующим синтаксисом:
Точнее, это создает процедуру по умолчанию, которая вызывается при вызове ключа без значения. Небольшое отличие в поведении, возникающее при использовании процедуры по умолчанию, а не значения по умолчанию, заключается в том, что новые пары ключ-значение будут добавляться к хэшу всякий раз, когда вызывается новый ключ, а не только при назначении. Сравните вызов foo[:u]
выше с вызовом foo[:bar]
в первом примере кода. foo[:bar]
не изменяет хеш, в отличие от foo[:u]
.