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"

Comments

3 Responses to “Ruby quick tip: Blocos para fallback em hash lookups”

  1. Lucas Uyezu on July 14th, 2008 08: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

  2. Lucas Húngaro on July 14th, 2008 09: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. :)

  3. Nome do Jogo » Artigo » Rails Podcast Brasil - Episódio 24 on July 16th, 2008 10:21

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

Leave a Reply