Robert Klemme wrote: > If I understand the rest of your post correctly it is not exactly the > same structure but rather similarly structured data in two different > data structures (custom classes and XML DOM). True, but it is a 3rd party object library that I don't have access to other than through OLE calls or file storage. > > The fix that I propose is to not have two data structures storing the > same data. If you have classes already for storing all this, I'd > probably write bit of code that builds the structure using an XML push > or pull parser. I wish that were the case, but 3rd party non-GPL'd code. :( > > Usually nil is returned for absent keys so you can do > I was attempting to avoid the case when it isn't..... > def method_missing(sym,*args,&blk) > self[sym] || self[sym.to_s] || super > end > .... this will trigger the creation and return of a memoized object, which is precisely a side-effect I want to avoid. For example: test=Hash.new {|k,v| k[v]=v.to_s*3} => {} test[:one] => "oneoneone" test[:two] => "twotwotwo" test.three NoMethodError: undefined method `three' for {:one=>"oneoneone", :two=>"twotwotwo"}:Hash from (irb):15 # cool and desired class Hash def method_missing(sym,*args,&blk) return self[sym] if self.key?(sym) return self[sym.to_s] if self.key?(sym.to_s) super end end => nil test.one => "oneoneone" test.two => "twotwotwo" test.three NoMethodError: undefined method `three' for {:one=>"oneoneone", :two=>"twotwotwo"}:Hash from (irb):20:in `method_missing' from (irb):25 #Same error message also cool and desired test[:three] => "threethreethree" test.three => "threethreethree" #Redefine with your more compact code, which isn't performing the key? check class Hash def method_missing(sym,*args,&blk) self[sym] || self[sym.to_s] || super end end => nil test.four => "fourfourfour" #Not my expected result. I would expect an error from that method call, but thanks for the effort. Mac http://pqmf.com -- Posted via http://www.ruby-forum.com/.