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

  • Friday Night Cranks

    Friday Night

    27 Mayıs 2007
  • Mary Jane Tauyan

    Mary Jane Ta

    20 AĞUSTOS 2009
  • UrAvgConsumer

    UrAvgConsume

    1 Ocak 2012