# -*- ruby -*- if( (h = Hash.new{|h,k|h[k]=k}) && !h[true] ) class Hash alias __aref [] alias __initialize initialize alias __default= default= alias __default default def initialize(*args, &block) __initialize(*args) @default_proc = block end def [](key) if( !key?(key) && @default_proc ) @default_proc.call(self,key) end __aref(key) end def default_proc @default_proc end def default(k = nil) if( k && @default_proc ) @default_proc.call(self, k) else __default end end def default=(val) __default=(val) @default_proc = nil val end end end