Onze dagmethode #3: Hash.multi
Geplaatst door Remco van 't Veer do, 07 feb 2008 08:00:00 GMT
Je hebt hem vast wel eens gebruikt Hash.new
met een block om een twee-dimensionale hash te maken;
map = Hash.new{|h,k| h[k] = {}}
map[:dragon][:strength] = 9
Maar soms wil je een multi-dimensionale hash;
def Hash.multi
Hash.new{|h,k| h[k] = Hash.multi}
end
Zelf gebruik ik hem in een applicatie als simpele cache waarvoor ik complexe sleutels heb;
CACHE = Hash.multi
def expensive_query(key)
cache = CACHE[:query][auth_level][current_channel]
unless cache.has_key?(key)
cache[key] = Server.query(auth_level, current_channel, key)
else
cache[key]
end
end
Cool! Ik wist niet dat je dit kon doen met een Hash en moest toch even uitproberen wat er precies gebeurd (ik dacht eerst dat er een hele grote Hash werd gemaakt):