Вот умный трюк для того, чтобы хэш autovivification в рубин (из граней):рубин хэш autovivification (фасеты)
# File lib/core/facets/hash/autonew.rb, line 19
def self.autonew(*args)
leet = lambda { |hsh, key| hsh[key] = new(&leet) }
new(*args,&leet)
end
Хотя это работает (конечно), я считаю, это очень расстраивает, что я могу» t выяснить, как это делают два лайнера, что он делает.
leet ставится как значение по умолчанию. Так что тогда просто доступ к h['new_key']
каким-то образом вызывает его и создает 'new_key' => {}
Теперь, я ожидаю, что h['new_key']
вернет объект значения по умолчанию, а не его оценку. То есть, 'new_key' => {}
не создается автоматически. Итак, как на самом деле получать звонки? Особенно с двумя параметрами?
Отличный ответ. – Pesto
Действительно. Это, в частности, научит меня больше никогда не ссылаться на RubyBook (поставляется со стандартным дистрибутивом рубинов), поскольку он не упоминал о том, что крошечный нерелевантный факт о блоках и новых. – artemave