Oneliner düz yakut, sadece yakut> 1.9.x ile çalışır:
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}
Dokunma yöntemi her zaman çağrıldığı nesneyi döndürür ...
Aksi takdirde active_support/core_ext/hash
(her Rails uygulamasında otomatik olarak gerekli olan) gerekiyorsa, ihtiyaçlarınıza bağlı olarak aşağıdaki yöntemlerden birini kullanabilirsiniz:
➜ ~ 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}
dışında bir kara liste yaklaşımı kullanır, bu nedenle argümanlar olarak listelenmeyen tüm anahtarları kaldırırken, dilim beyaz liste yaklaşımı kullanır, bu nedenle bağımsız değişken olarak listelenmeyen tüm anahtarları kaldırır. Ayrıca , verilen yöntemi değiştiren bu yöntemin ( except!
ve slice!
) patlama sürümü de vardır, ancak dönüş değerleri farklıdır ve her ikisi de bir karma döndürür. İçin kaldırılan anahtarları slice!
ve aşağıdakiler için saklanan anahtarları temsil eder 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}