以前紹介した
Hash#only
にちょっとした修正。
lib/hash_e
1 class Hash 2 def only(*args) 3 args = *args if args[0].is_a? Array 4 args.inject({}){|hash, key| hash[key] = self[key] if include? key; hash} 5 end 6 7 def only!(*args) 8 args = *args if args[0].is_a? Array 9 args.inject({}){|hash, key| hash[key] = self[key]; hash} 10 end
以前のHash#only
は、指定したキーが存在しない場合でも
1 {:foo => 1}.only(:bar) #=> {:bar => nil}
というように、nilを指すHashを返していましたが、
キーが存在しない場合に空のHashを返すようにしてみました。
従来の挙動をするメソッドは、Hash#only!
と感嘆符付きの
メソッドにしています。
修正後の挙動は以下の通り。
1 {:foo => 1}.only(:bar) #=> {} 2 {:foo => 1}.only!(:bar) #=> {:bar => nil}
posted by
genki
on Sat 19 Jan 2008
at 13:30