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

  • failblog

    failblog

    17 HAZİRAN 2008
  • Mismag822 - The Card Trick Teacher

    Mismag822 -

    18 EKİM 2008
  • Soulkiller13 ツ

    Soulkiller13

    30 Mayıs 2013