ハッシュの中の指定されたキーに対する値がセットされているかチェックする
例えば、
h = {:a => 'aaa', :b => 'bbb', :c => 'ccc', :d => nil}
みたいなハッシュがあったとして、:aのキーに対応する値があるかチェックするには
puts 'true' if h[:a]
みたいにそのままif文に突っ込めばいいのだけれど、それが複数になった場合に一つずつh[キー]って書くのはなんかめんどくさいというか見栄えば悪いというか。
なので、
class Hash def set? *args args.inject(true) {|res, key| res && self.has_key?(key) && self[key]} end end
とか定義してみると、
h.set? :a, :b, :c #=> true h.set? :a, :b, :c, :d #=> false
となって楽しい。
has_key?だと、キーはあるけど値はnilみたいな場合にtrueを出してしまうので、「値がセットされているか確かめたい」という場合には役立つかもしれない。
使う機会もほとんどないかもしれない。