Вот хитроумный трюк, чтобы включить автообнаружение хеша в рубине (взято из граней):
# 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
Хотя это работает (конечно), я нахожу это действительно расстраивающим, что я не могу понять, как это делают два лайнера, что он делает.
leet помещается как значение по умолчанию. Так что тогда просто доступ к h['new_key']
каким-то образом вызывает его и создает 'new_key' => {}
Теперь я ожидаю, что h['new_key']
вернет объект значения по умолчанию, а не его оценку. То есть 'new_key' => {}
не создается автоматически. Итак, как на самом деле получать звонки? Особенно с двумя параметрами?