変数を代入すると、自動で特異メソッドを生成する
空っぽの場合に、Item クラスが入るは微妙かもしれないけれど。
class Item < Hash def method_missing(name, *argv) if name.to_s =~ /(.+?)=$/ method_name = $1.to_sym value = argv[0] else method_name = name value = Item.new end self[method_name] = value self.instance_eval <<-EOD def #{method_name} self[:#{method_name}] end def #{method_name}=value self[:#{method_name}] = value end EOD __send__(method_name) end end require 'pp' item = Item.new puts "item.foo => #{item.foo}" # => item.foo => puts "item.foo#class => #{item.foo.class}" # => item.foo#class => Item item.foo = 100 puts "item.foo => #{item.foo}" # => item.foo => 100 item.aaa.bbb = "ccc" puts "item.aaa.bbb => #{item.aaa.bbb}" # => item.aaa.bbb => ccc pp item # => {:aaa=>{:bbb=>"ccc"}, :foo=>100}