ワンライナーの単純なルビで、1.9.xを超えるルビでのみ機能します。
1.9.3p0 :002 > h = {:a => 1, :b => 2}
=> {:a=>1, :b=>2}
1.9.3p0 :003 > h.tap { |hs| hs.delete(:a) }
=> {:b=>2}
Tapメソッドは常に呼び出されたオブジェクトを返します...
それ以外の場合active_support/core_ext/hash
(必要な場合はすべてのRailsアプリケーションで自動的に必要になります)、必要に応じて次のいずれかの方法を使用できます。
➜ ~ irb
1.9.3p125 :001 > require 'active_support/core_ext/hash' => true
1.9.3p125 :002 > h = {:a => 1, :b => 2, :c => 3}
=> {:a=>1, :b=>2, :c=>3}
1.9.3p125 :003 > h.except(:a)
=> {:b=>2, :c=>3}
1.9.3p125 :004 > h.slice(:a)
=> {:a=>1}
exceptはブラックリストアプローチを使用するため、argsとしてリストされているすべてのキーを削除し、sliceはホワイトリストアプローチを使用しているため、引数としてリストされていないすべてのキーを削除します。指定されたハッシュを変更するこれらのメソッド(except!
and slice!
)のbangバージョンも存在しますが、それらの戻り値は異なり、どちらもハッシュを返します。削除されたキーとのためにslice!
保持されているキーを表しますexcept!
。
1.9.3p125 :011 > {:a => 1, :b => 2, :c => 3}.except!(:a)
=> {:b=>2, :c=>3}
1.9.3p125 :012 > {:a => 1, :b => 2, :c => 3}.slice!(:a)
=> {:b=>2, :c=>3}