def fetch(key, *default)
      trees.lazy.each do |tree|
        catch do |ball|
          return tree.fetch(key) { throw ball }
        end
      end
      return yield(key) if block_given?
      return default.first unless default.empty?

      raise KeyError, %(key not found: "#{key}")
    end
def fetch(key, *default)
      trees.lazy.each do |tree|
        catch do |ball|
          return tree.fetch(key) { throw ball }
        end
      end
      return yield(key) if block_given?
      return default.first unless default.empty?

      raise KeyError, %(key not found: "#{key}")
    end
Fetch a value from a forest

 :call-seq:
   fetch(key) => value
   fetch(key, default) => value
   fetch(key) { |key| } => value

 The first form raises a +KeyError+ unless +key+ has a value.