原です。

>なひです。
>
>class Hash
>   def method_missing( msg_id, *a, &b )
>     self[ msg_id ] || self[ msg_id.id2name ]
>   end
>end
>
>def foo
>   return "foo" => 1, :bar => 2
>end

こういうのもあるかな。

class Hash
   def to_struct
     Struct.new(nil, *keys)[*values]
   end
end
foo = {:name => "matz", :age => 104}.to_struct
p [foo.name, foo.age] #=> ["matz", 104]

>この用途なら原さんが最初に書かれているように、
>クラスを作るよりオブジェクトひとつ作って特異メソッドで
>respond_to?を保障するというやり方がよさそうに思います。
>keyをSymbol or Stringに固定してHash#{key}でアクセスできる
>YAHashがあればよい?

まあ、[:   ] より . の方が [SHIFT] を入れて、打数が 1/6 な
のも魅力なんですよねえ。US Keyboard でね。^^;