Rodrigo Martins

I'm a Catholic Christian, software developer, Passionate about life, codes, questions, theories and theorems. :)

O Mundo Hash No Ruby 1.9.2 - Parte III - Hashs Codes

| Comments

Continuando os estudos de Ruby, e a leitura do livro The Ruby Programming Language

Hoje vamos falar um pouco mais de Hash, é hora de nos aprofundar.

Códigos de Hash, Igualdade e mutáveis Chaves

Hashs[1] de Ruby são implementadas, sem surpresa, com um conjunto de dados de estrutura conhecida como uma tabela hash. Objetos usados como chaves em um hash deve ter um método chamado de hash que retorna Fixnum hashcode para a chave. Se duas chaves são iguais, elas devem ter o mesmo hashcode. Chaves desiguais também pode ter a mesma hashcode, mas hash’s de tabelas são mais eficientes quando hashcodes duplicados são raros.

A classe Hash compara chaves igualdade com o método eql?. Para outras classes Ruby, eql? obras como o operador == . Se você definir uma nova classe que substitui o método eql?, você deve também substituir o método hash, ou se não as instâncias de sua classe não vam funcionar como chaves em um hash.

Se você definir uma classe e não sobreescrever o método eql?, em seguida, as instâncias dessa classe são comparadas com a identidade do objeto quando usado como chave de hash. Duas instâncias distintas de sua classe são distintas chaves de hash mesmo que eles representam o mesmo conteúdo. Neste caso, o método padrão hash é apropriado: retorna a única object_id do objeto.

Note-se que objetos mutáveis ​​são problemáticos como chaves de hash. Mudar o conteúdo de um objeto geralmente muda seu hashcode. Se você usar um objeto como uma chave e então alterar esse objeto, a tabela de hash ficará corrompida, e o hash não funciona corretamente.

Porque strings são mutáveis, mas comumente usamos chaves de hash, Ruby trata eles como um caso especial e faz cópias privadas de todas as cadeias utilizadas como chaves. Este é o único caso especial, no entanto, você deve ser muito cuidado ao usar qualquer outro objeto mutável como uma chave hash. Considera fazendo uma cópia privada ou chamando o método freeze. Se você deve usar chaves de hash mutável, chame o método rehash do Hash cada vez que você alterar uma chave.

-> Hash

Até a proxima!

Comments