From: Kenta Murata Date: 2011-01-07T10:11:03+09:00 Subject: [ruby-dev:42972] Re: 特異メソッドの定義の簡略化 むらたです。 2011年1月7日9:18 : >> OpenStruct にお望みの挙動が実装されています。 > > ありがとうございます。うれしいのですが、OpenStructという名前が長いので使うのに躊躇しそうです。 たとえば require 'ostruct' OS = OpenStruct s = OS.new(a: [1, 2, 3], foo: 5) s.a #=> [1, 2, 3] s.foo #=> 5 このように、適当に短い名前を自分で作ってしまえば長くないですよね。 > 具体的にはHashでもいいかなと…(せっかく教えていただいたのにすみません) > > s = {a: [1,2,3], foo: 5} > s[:a] > s[:foo] > > ## method missing をつかって s.a, s,fooと書けたら最高。Matzさんどうですか? こちらに関しては require 'ostruct' class Hash def to_os OpenStruct.new(self) end end こうしておけば s = {a: [1, 2, 3], foo: 5}.to_os s.a #=> [1, 2, 3] s.foo #=> 5 とできますね。 -- Kenta Murata OpenPGP FP = 1D69 ADDE 081C 9CC2 2E54 98C1 CEFE 8AFB 6081 B062 本を書きました!! 『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22 E-mail: mrkn@mrkn.jp twitter: http://twitter.com/mrkn/ blog: http://d.hatena.ne.jp/mrkn/