Чтобы объявить значение хеша по умолчанию в Ruby, передайте нужное значение методу Hash #new в качестве аргумента, как показано ниже.

Когда мы вызываем ключи без присвоенных значений в нашем хеше, возвращается значение по умолчанию, 0.

Однако, когда мы назначаем изменяемый объект в качестве значения по умолчанию, например, массив, возникает поведение, которое сложнее анализировать.

В то время как мы могли бы ожидать, что foo[:bar] теперь будет содержать [0] , foo все еще пусто. Что было изменено, так это значение по умолчанию для хеша. Поскольку такое поведение не является ожидаемым и нежелательным в большинстве случаев, уникальные изменяемые объекты могут использоваться в качестве значения по умолчанию для хэша со следующим синтаксисом:

Точнее, это создает процедуру по умолчанию, которая вызывается при вызове ключа без значения. Небольшое отличие в поведении, возникающее при использовании процедуры по умолчанию, а не значения по умолчанию, заключается в том, что новые пары ключ-значение будут добавляться к хэшу всякий раз, когда вызывается новый ключ, а не только при назначении. Сравните вызов foo[:u] выше с вызовом foo[:bar] в первом примере кода. foo[:bar] не изменяет хеш, в отличие от foo[:u].