SORU
3 HAZİRAN 2011, Cuma


Nasıl Karma bir anahtarı kaldırın ve Ruby/Rails kalan karma almak için?

Ben Karma için yeni bir çift eklemek için:

{:a => 1, :b => 2}.merge!({:c => 3})   # => {:a=>1, :b=>2, :c=>3}

Benzer bir şekilde Karma bir anahtar silmek var mı ?

Bu gibi çalışır:

{:a => 1, :b => 2}.reject!{ |k| k == :a }   # => {:b=>2}

ama bir şey gibi olması beklenir:

{:a => 1, :b => 2}.delete!(:a)   # => {:b=>2}

Dönen DEĞER gibi şeyleri yapabilmem kalan karma olacak, önemlidir:

foo(my_hash.reject!{ |k| k == my_key }

bir satır.

CEVAP
19 HAZİRAN 2012, Salı


Bu anahtarlar ile karma döndüren Rails has an except/except! method kaldırıldı. Eğer zaten Raylar kullanıyorsanız, bu kendi versiyonu yaratmanın anlamı yok.

class Hash
  # Returns a hash that includes everything but the given keys.
  #   hash = { a: true, b: false, c: nil}
  #   hash.except(:c) # => { a: true, b: false}
  #   hash # => { a: true, b: false, c: nil}
  #
  # This is useful for limiting a set of parameters to everything but a few known toggles:
  #   @person.update(params[:person].except(:admin))
  def except(*keys)
    dup.except!(*keys)
  end

  # Replaces the hash without the given keys.
  #   hash = { a: true, b: false, c: nil}
  #   hash.except!(:c) # => { a: true, b: false}
  #   hash # => { a: true, b: false }
  def except!(*keys)
    keys.each { |key| delete(key) }
    self
  end
end

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AceHoodVEVO

    AceHoodVEVO

    12 Mayıs 2009
  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • SRT Photoshop Tutorials

    SRT Photosho

    19 Aralık 2012