Palavras-chave: Ruby, hash, default, blocos
Em Ruby podemos permitir que um valor default seja retornado na tentativa de acesso à um elemento que não existe ainda em uma hash, dessa maneira:
hash = Hash.new(0) puts hash["abobora"] 0 puts hash["batata"] 0
Mais interessante ainda é criarmos o valor de um elemento que não existe através da execução de um bloco de código. Vamos supor que queremos uma hash que contenha a data de criação de domínios, a qual terá como chave a URL do domínio e a data de criação como valor, retornado após uma consulta à uma determinada URL:
require "open-uri" hash = Hash.new do |hash,url| html = open("http://reports.internic.net/cgi/whois? whois_nic=#{url}&type=domain").read hash[url] = html.grep(/Creat/i).join.split(/:/,2)[1].strip.chomp end hash["eustaquiorangel.com"] hash["codare.net"] hash["ruby-lang.org"] hash.each {|url,date| puts "#{url}: #{date}"}
O resultado será:
codare.net: 19-sep-2006 ruby-lang.org: 16-Sep-1999 09:28:50 UTC eustaquiorangel.com: 13-jul-2006