Как обработать комбинацию [] + = для автоживущего хэша в Ruby?

Для реализации авто-вивификации хэша Ruby можно использовать следующий класс

class AutoHash < Hash
  def initialize(*args)
    super()
    @update, @update_index = args[0][:update], args[0][:update_key] unless 
args.empty?
  end

  def [](k)
    if self.has_key?k
      super(k)
    else
      AutoHash.new(:update => self, :update_key => k)
    end
  end

  def []=(k, v)
    @update[@update_index] = self if @update and @update_index
    super
  end

  def few(n=0)
    Array.new(n) { AutoHash.new }
  end
end

Этот класс позволяет делать следующие вещи

a = AutoHash.new
a[:a][:b] = 1
p a[:c] # => {}             # key :c has not been created
p a     # => {:a=>{:b=>1}}  # note, that it does not have key :c

a,b,c = AutoHash.new.few 3
b[:d] = 1
p [a,b,c] # => [{}, {:d=>1}, {}]  # hashes are independent

Естьнемного более сложное определение этого классапредложенный ДжошуаЭто немного сложно для меня понять.

проблема

Есть одна ситуация, когда я думаю, что новый класс можно улучшить. Следующий код завершается ошибкой с сообщением об ошибкеNoMethodError: undefined method '+' for {}:AutoHash

a = AutoHash.new
5.times { a[:sum] += 10 }

Что бы вы сделали, чтобы справиться с этим? Можно ли определить[]+= оператор?

Смежные вопросы

Возможна ли автоматическая инициализация многомерного хеш-массива в Ruby, как в PHP?Многократная инициализация авививилизационных хэшей с использованием нового оператора в Ruby RubyВсе еще открыт: Как создать оператор для глубокого копирования / клонирования объектов в Ruby?

Ответы на вопрос(3)

Ваш ответ на вопрос