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

  • celebrateubuntu

    celebrateubu

    23 Mayıs 2011
  • GirlSanctuaryBlog

    GirlSanctuar

    28 Aralık 2011
  • Living Waters

    Living Water

    9 AĞUSTOS 2006