Tengo una matriz en Ruby que consta de 5 matrices vacías. Estoy intentando utilizar el operador <<
para insertar una cadena en la primera matriz, pero el resultado es que la cadena se inserta en TODAS las matrices. Por favor, ayúdame a entender esto.Al insertar una cadena en una matriz dentro de una matriz se obtiene un resultado inesperado
El resultado esperado es:
# => [["car"], [], [], [], []]
pero en cambio me sale:
# => [["car"], ["car"], ["car"], ["car"], ["car"]]
volcado IRB:
1.9.3-p194 :001 > output = Array.new(5, [])
=> [[], [], [], [], []]
1.9.3-p194 :002 > output.inspect
=> "[[], [], [], [], []]"
1.9.3-p194 :003 > output[0].inspect
=> "[]"
1.9.3-p194 :004 > output[0] << "car"
=> ["car"]
1.9.3-p194 :005 > output.inspect
=> "[[\"car\"], [\"car\"], [\"car\"], [\"car\"], [\"car\"]]"
posible duplicado de [¿Por qué doesn 'manera tersa de definir nuevos hash en el trabajo de Ruby (todos se refieren al mismo o bject)] (http://stackoverflow.com/questions/7540084/why-doesnt-terse-way-of-defining-new-hashes-in-ruby-work-they-all-refer-to-sam) –
Gracias ¡todas! Esto me estaba DETENIENDO REALMENTE. Y ahora aprendí un nuevo método: object_id –
¿Alguien puede ayudarme a entender por qué sucede esto, así puedo entender mejor a Ruby? –