Ésta es exactamente el comportamiento que se puede esperar para ver.
Nunca agrega nada al Hash
, por lo tanto, el Hash
está completamente vacío. Cuando busca una tecla, esa clave nunca existirá, por lo tanto, devuelve el valor predeterminado, que ha especificado que es Array
.
Por lo tanto, busca la clave 'a'
, que no existe, y devuelve el Array
que especificó como valor predeterminado. Luego, llama al <<
en ese Array
, que le agrega un valor (1
).
A continuación, mirar hacia arriba la tecla 'b'
, que además no existe, y por lo tanto devuelve el Array
ha especificado como el valor por defecto, que ahora contiene el elemento 1
agregó anteriormente. A continuación, llame al <<
en ese Array
, añadiéndole el valor 2
.
Usted termina con un Hash
que todavía está vacío, ya que nunca le ha agregado nada. El valor predeterminado de Hash
ahora es una matriz que contiene los valores 1
y 2
.
El resultado que está viendo es porque IRb siempre imprime el resultado de la última expresión que se evaluó. La última expresión en su ejemplo es llamar al <<
en el Array
. <<
devuelve su receptor, que luego es el valor de retorno de toda la expresión y, por tanto, lo que imprime IRb.
¿No está seguro del resultado que está viendo? O lo que el hash realmente contiene? No está claro lo que estás buscando aquí. – jmccarthy