From: dblack@... Date: 2007-08-26T09:26:11+09:00 Subject: Re: class X < Hash ... how do I do X.new { |hash, key| ...} ? Hi -- On Sun, 26 Aug 2007, Larry Fast wrote: > I created a child class of Hash and would like to internalize the > equivalent of Hash.new {|hash,key| } The following code failed: > > class X < Hash > def initialize > super { |hash,key| ... } > end > end > > Any suggestions? I suppose I could do it externally with a create() > wrapper but it doesn't seem very pragmatic. > > def create_X > y = X.new {|hash,key| ... } > return y > end > > My overall goal is to record a list of attempts to read undefined Keys. Here's what I did -- I'm not sure how it differs from yours but hopefully it will help: class X < Hash attr_accessor :attempts def initialize self.attempts = [] super {|h,k| attempts << k unless h.has_key?(k); nil } end end h = X.new h[1] = 2 p h[1] # 2 p h[0] # nil p h[2] # nil p h.attempts # [0,2] David -- * Books: RAILS ROUTING (new! http://www.awprofessional.com/title/0321509242) RUBY FOR RAILS (http://www.manning.com/black) * Ruby/Rails training & consulting: Ruby Power and Light, LLC (http://www.rubypal.com)