#module MyHashExtension class Hash alias_method :old, :[]= def []=( key, val ) #super( key, val ) self.old(key,val) if @keys and !@keys.include?(key) then @keys << key end end def each @keys = self.keys @keys.each do |k| yield k, self[k] if self.has_key? k end @keys = nil end alias :each_pair :each def each_key @keys = self.keys @keys.each do |k| yield k if self.has_key? k end @keys = nil end end if __FILE__ == $0 # usage: ruby1.9 -I . -rmod_hash test.rb # or: require 'mod_hash' before using Hash h = Hash.new #h = {}.extend MyHashExtension h[1] = 2 h.each do |k,v| h[k+1] = v*2 if v < 10000000000 $stdout << "#{k}: #{v}\n" end p h end