Oneliner ruby ธรรมดาใช้งานได้กับ 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}
วิธีการแตะจะส่งคืนวัตถุที่ถูกเรียก ...
มิฉะนั้นถ้าคุณต้องการ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}
ยกเว้นใช้วิธีบัญชีดำดังนั้นมันจะลบคีย์ทั้งหมดที่แสดงรายการเป็น args ในขณะที่sliceใช้วิธี whitelist ดังนั้นมันจะลบคีย์ทั้งหมดที่ไม่อยู่ในรายการเป็นอาร์กิวเมนต์ นอกจากนี้ยังมีบางรุ่นของวิธีการเหล่านั้น ( except!
และslice!
) ซึ่งแก้ไขแฮชที่กำหนด แต่ค่าส่งคืนของพวกเขาจะแตกต่างกันทั้งสองพวกเขากลับแฮช เพราะมันหมายถึงกุญแจที่ถูกลบสำหรับ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}