Oneliner ruby biasa, hanya berfungsi dengan ruby> 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}
Metode ketuk selalu mengembalikan objek yang dipanggil ...
Kalau tidak, jika Anda diharuskan active_support/core_ext/hash
(yang secara otomatis diperlukan di setiap aplikasi Rails), Anda dapat menggunakan salah satu metode berikut tergantung pada kebutuhan Anda:
➜ ~ 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}
kecuali menggunakan pendekatan daftar hitam, sehingga menghapus semua kunci yang terdaftar sebagai args, sedangkan slice menggunakan pendekatan daftar putih, sehingga menghapus semua kunci yang tidak terdaftar sebagai argumen. Ada juga versi bang dari metode tersebut ( except!
dan slice!
) yang memodifikasi hash yang diberikan tetapi nilai kembalinya berbeda keduanya mengembalikan hash. Ini mewakili kunci yang dihapus untuk slice!
dan kunci yang disimpan untuk 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}