Aquí es un truco ingenioso para permitir autovivification de hash de rubí (tomado de facetas):rubí de hash autovivification (facetas)
# 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
pesar de que funciona (por supuesto), me resulta muy frustrante que puede' t averiguar cómo este dos trazador hace lo que hace.
leet se pone como valor predeterminado. Entonces, simplemente accediendo a h['new_key']
de alguna manera lo abre y crea 'new_key' => {}
Ahora, esperaría que h['new_key']
devuelva el valor predeterminado del objeto en lugar de evaluarlo. Es decir, 'new_key' => {}
no se crea automáticamente. Entonces, ¿cómo se llama realmente a leet? Especialmente con dos parámetros?
Excelente respuesta. – Pesto
De hecho lo es. Esto, en particular, me enseñará a nunca volver a referirme a RubyBook (viene con una distribución estándar de ruby windows), ya que no mencionó ese pequeño hecho irrelevante sobre los bloques y los nuevos. – artemave