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

  • Engadget

    Engadget

    18 EYLÜL 2006
  • Ryan Ha

    Ryan Ha

    9 NİSAN 2006
  • TheGamer2323

    TheGamer2323

    25 Ocak 2009