Fork me on GitHub

Keep Learning Conhecimento nunca é o bastante

Postado em
13 July 2008 @ 22:50

Tag(s)
Dicas, Ruby

Ruby quick tip: Blocos para fallback em hash lookups

Normalmente, ao tentar fazer um lookup em um hash com uma chave não existente, você tem o seguinte comportamento:

>> h = {:foo => "bar"}
=> {:foo=>"bar"}
>> h[:other_foo]
=> nil

Você pode adicionar um bloco para tratar esses casos:

>> h = Hash.new { |hash, key| "#{key} is not here"}
=> {}
>> h[:foo]
=> "foo is not here"

É possível, inclusive, alterar o hash em questão:

>> h = Hash.new { |hash, key| hash[key] = "value for #{key}" }
=> {}
>> h[:foo]
=> "value for foo"

3 Comentários

Comentário por
Lucas Uyezu
14 July 2008 @ 8:28

Para os casos mais simples é só usar o valor de “não-encontrado” no construtor do hash:

>> h = Hash.new 0
=> {}
>> h[:foo]
=> 0


Comentário por
Lucas Húngaro
14 July 2008 @ 9:17

Sim. Além do construtor, há ainda o atributo “default”:

>> h = Hash.new
=> {}
>> h.default = 0
=> 0
>> h[:foo]
=> 0

Mas eu queria mesmo era falar da possibilidade de usar um bloco, que abre muitas possibilidades.

Obrigado pelo comentário. 🙂


[…] Ruby quick tip: Blocos para fallback em hash lookups […]


Deixe um comentário