るびきちです。
HashからStructを作れたらいいなと思いました。
def Struct(hash)
Struct.new(*hash.keys.map(&:to_sym)).new(*hash.values)
end
s = Struct("a"=>1, :b=>2) # => #<struct a=1, b=2>
s.a # => 1
s.b # => 2
s.a+=23
s # => #<struct a=24, b=2>
理由は、
* OpenStructはHashから作成できる。
* OpenStructは method_missing を使っているため、typoに弱い。
* accessor形式でキーにアクセスしたがる人をよく見掛ける。
* Structなのでtypoが発見しやすい。
* Struct自体HashとArrayの双方の性質を持ち合わせている。
「Kernel.#Struct」、「Struct.[]」、「Struct.new」の引数にHashを指定して
作れるといいと思います。
--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/