Como lidar com a combinação [] + = para hash de vivivação automática em Ruby?

Para implementar a auto-vivificação do hash Ruby, pode-se empregar a seguinte classe

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

Esta classe permite fazer o seguinte

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

Há simdefinição um pouco mais avançada desta classeproposto por Joshua, o que é um pouco difícil para mim entender.

Problema

Há uma situação em que acho que a nova classe pode ser melhorada. O código a seguir falha com a mensagem de erroNoMethodError: undefined method '+' for {}:AutoHash

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

O que você faria para lidar com isso? Pode-se definir[]+= operador?

Perguntas relacionadas

A inicialização automática da matriz de hash multidimensional é possível no Ruby, como no PHP?Inicialização múltipla de hashes de auto-vivificação usando um novo operador em Ruby ruby hash initialization rAinda aberto: Como criar um operador para cópia / clonagem profunda de objetos no Ruby?

questionAnswers(3)

yourAnswerToTheQuestion