Oneliner zwykły rubin, działa tylko z 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}
Metoda dotknij zawsze zwraca obiekt, na który jest wywoływany ...
W przeciwnym razie, jeśli jest to wymagane active_support/core_ext/hash
(co jest automatycznie wymagane w każdej aplikacji Railsowej), możesz użyć jednej z następujących metod w zależności od potrzeb:
➜ ~ 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}
oprócz wykorzystuje podejście z czarnej listy, więc usuwa wszystkie klucze wymienione jako argumenty, a slice używa podejścia z białej listy, więc usuwa wszystkie klucze, które nie są wymienione jako argumenty. Istnieje również wersja Bang tej metody ( except!
i slice!
), która modyfikuje dany skrót, ale ich wartość zwracana jest inna, obie zwracają skrót. Reprezentuje usunięte klucze slice!
i klucze przechowywane dla 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}