From: rubikitch@... Date: 2008-02-13T19:18:00+09:00 Subject: [ruby-dev:33756] Re: HashからStructを作る From: Hidetoshi NAGAI Subject: [ruby-dev:33753] Re: HashからStructを作る Date: Wed, 13 Feb 2008 16:01:04 +0900 > > あるいは、Hashのキーを固定する(追加不可能、存在しないキーにアクセスしたら例外) > > メソッドを作成できないものでしょうか? > > Hash#fix_keys, Hash#freeze_keys, Hash#fix, Hash#lock, Hash#pin, Hash#fixate… > > そうしたものが広く必要とされているのかどうかがわからないのですが, > 下記のように (一部だけ実装) 自分で作るのではダメなのでしょうか? 自分で作るくらいならばStructで十分かと。 やはり「キーが固定されたハッシュ」はStructが適任なのでしょう。 そういえばStruct#each_pairがあるのにStruct#to_hashはないのですね。 暗黙の型変換だからやりすぎ? 僕の中ではStructは「キーが固定されたハッシュ」と「配列」の双方の性質を持つクラスです。 Struct#membersがあるのにStruct#member?がないのも意外でした。 さらにStruct#keysとStruct#key?がそれぞれStruct#keysとStruct#membersの別名であると 整合性が取れていると思います。 # ついでにPStore#keys, PStore#key?の別名も希望。 s = Struct.new(:a,:b).new(1,2) # => # s.to_a # => [1, 2] s.to_hash rescue $! # => #> s.members # => [:a, :b] # Enumerable#member?が呼ばれるからmembersとの対称性が取れていない s.member? 1 # => true s.member? :a # => false s.key? :a rescue $! # => #> -- rubikitch Blog: http://d.hatena.ne.jp/rubikitch/ Site: http://www.rubyist.net/~rubikitch/