# File lib/ramaze/snippets/ramaze/lru_hash.rb, line 208
    def fetch(key, default = (p_default = true; nil))
      if key?(key)
        value = self[key]
      elsif p_default.nil?
        value = self[key] = default
      elsif block_given?
        value = self[key] = yield(key)
      else
        raise KeyError, "key not found: %p" % [key]
      end

      value
    end