SORU
11 Kasım 2010, PERŞEMBE


Nasıl Ruby bir karma kopyalayabilirim?

Ruby bir acemi biraz (komisyon komut, şimdi yazma) olduğumu kabul ediyorum. Çoğu dilde, kopya yapıcılar bulmak kolay. Aradıktan yarım saat sonra ruby bulamadı. Orijinal örneğini etkilemeden, değiştirmeden, çok karma bir kopyasını oluşturmak istiyorum.

Beklendiği gibi işe yaramazsa beklenen bazı yöntemler:

h0 = {  "John"=>"Adams","Thomas"=>"Jefferson","Johny"=>"Appleseed"}
h1=Hash.new(h0)
h2=h1.to_hash

Bu arada, bu çok kaba bir çözüm için müracaat ettim

def copyhash(inputhash)
  h = Hash.new
  inputhash.each do |pair|
    h.store(pair[0], pair[1])
  end
  return h
end

CEVAP
11 Kasım 2010, PERŞEMBE


Diğerleri belirttiği gibi, clone yapacak. Karma clone yüzeysel bir kopyasını oluşturur unutmayın. Şöyle ki:

h1 = {:a => 'foo'} 
h2 = h1.clone
h1[:a] << 'bar'
p h2                # => {:a=>"foobar"}

Ne karma başvuruları kopyalanan, ama nesneleri başvurular bakın.

Eğer derin bir kopyasını istiyorsanız:

def deep_copy(o)
  Marshal.load(Marshal.dump(o))
end

h1 = {:a => 'foo'}
h2 = deep_copy(h1)
h1[:a] << 'bar'
p h2                # => {:a=>"foo"}

deep_copy sıraya herhangi bir nesne için çalışıyor. En dahili veri türleri (Dizi, Hash, String, &c.) sıraya olabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • cyriak

    cyriak

    29 Mart 2006
  • Huot Media

    Huot Media

    7 Mayıs 2010
  • The Platform

    The Platform

    14 HAZİRAN 2006