Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

258
Visualizações
Ejecutar Hash.new([]) hace lo que espera pero no de la manera que espera

Entonces, quiero crear un hash donde las claves se conviertan en matrices sin tener que declararlas por separado.

Por lo tanto, uso

 foo = Hash.new([]) => {}

Luego puedo agregar elementos a las claves que no se han declarado previamente

 foo[:bar] << 'Item 1' => ['Item 1']

Hay algo raro en hacer esto. Como cuando llamo

 foo => {}

para ver el hash, está vacío. incluso corriendo

 foo.keys => []

muestra que está vacío. Sin embargo, si corro

 foo[:bar] => ['Item 1']

Por favor, haz que tenga sentido.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

foo = Hash.new([]) establece el valor predeterminado de una clave que no existe en una matriz. Aquí foo[:bar] << 'Item 1' , la tecla :bar no existe, por lo que foo usa una matriz a la que agrega un nuevo elemento. Al hacerlo, muta el valor predeterminado porque la matriz se le proporciona mediante una referencia.

 > foo = Hash.new([]) => {} > foo.default => []

Si llama a cualquier clave no definida en su hash, obtendrá esta matriz:

 > foo[:bar] << 'Item 1' => ["Item 1"] > foo[:foo] => ["Item 1"]

Para lograr su objetivo, debe devolver una nueva matriz cada vez. Es posible pasando un bloque a Hash.new , el bloque se ejecutará cada vez que acceda a una clave no definida:

 > foo = Hash.new { |hash, key| hash[key] = [] } => {} > foo[:bar] << 'Item 1' => ["Item 1"] > foo[:bar] => ["Item 1"] > foo.keys => [:bar] > foo[:foo] => [] > foo[:foo] << 'Item 2' => ["Item 2"] > foo => {:bar=>["Item 1"], :foo=>["Item 2"]}

Aquí está la documentación .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda