2010-07-19 13 views
5

¿Debería ser este el caso, es decir, estoy malentendido, o es un error?¿Es esto un error en el método Array.fill en Ruby?

a = Array.new(3, Array.new(3)) 
a[1].fill('g') 

=> [["g", "g", "g"], ["g", "g", "g"], ["g", "g", "g"]] 

en caso de no resultar en:

=> [[nil, nil, nil], ["g", "g", "g"], [nil, nil, nil]] 

Respuesta

9

Array.new(3, Array.new(3)) devuelve una matriz que contiene la misma matriz tres veces (en otras palabras: la expresión Array.new(3) se evalúa exactamente una vez y no se hacen copias).

Lo que probablemente desee es Array.new(3) { Array.new(3) }, que evalúa Array.new(3) tres veces y le ofrece una matriz de tres matrices independientes.

+0

fantástico, gracias! –

0

Es correcto Array.new(array), devuelve una nueva matriz creada con copias de tamaño de obj (es decir, las referencias de tamaño al mismo obj)

Cuestiones relacionadas