SORU
6 HAZİRAN 2014, Cuma


Swift dizi atama tutarsız bir sebep ne bir referans ne de derin bir kopyasını) var mı?

Belgeleri okuyorum ve sürekli dile tasarım kararları bazı kafamı sallıyorum. Ama beni gerçekten en çok etkileyen şey diziler nasıl işlendiğini ise şaşkın.

Oyun koştum ve bu çalıştı. Onları da deneyebilirsiniz. İlk örnek:

var a = [1, 2, 3]
var b = a
a[1] = 42
a
b

Burada a b kabul edebilirim ** 6, her ikisi de. Diziler başvurulan - TAMAM!

Şimdi bakın bu örnek:

var c = [1, 2, 3]
var d = c
c.append(42)
c
d

c [1, 2, 3, 42] d [1, 2, 3]. Bu son örnekte değişim gördüm ama bunda görmüyor, d. Belgelere uzunluğu değiştiği için söylüyor.

Şimdi, buna ne dersiniz:

var e = [1, 2, 3]
var f = e
e[0..2] = [4, 5]
e
f

e cool [4, 5, 3]. Güzel multi-dizin değiştirme var ama f HALA uzunluğu değişmemiş olsa bile değişim görmüyor.

Yani özetle, bir dizi ortak başvuruyorsa 1 öğe değiştirirseniz, değişiklikleri görmek, ama birden fazla eleman değişikliği veya öğeler eklemek, bir kopyasını yaptı.

Bu benim için çok kötü bir tasarım gibi görünüyor. Böyle düşünüyorum? Diziler böyle davranması gerektiğini anlamıyorum bir nedeni var mı?

EDİT: Diziler değişti ve artık değer mantığı var. Çok daha aklı başında!

CEVAP
6 HAZİRAN 2014, Cuma


Unutmayındizi anlambilim ve sözdizimi Güncellemelerinden beta 3 sürümü ile değiştirildi(blog post), soru artık geçerlidir. Şu cevabı beta 2 için geçerli


Performansı artırmak için. Temelde, onlar mümkün olduğunca uzun dizileri kopyalama önlemek için çalışıyorlar (ve iddia "C-performans"). Dili book alıntı:

Diziler, fotokopi için, sadece dizinin uzunluğunu değiştirmek için potansiyeli olan bir eylem gerçekleştirdiğinizde yer alır. Bu, ekleme, ekleme veya öğeleri kaldırarak, ya da dizideki öğelerin bir dizi yerine menzilli bir simge kullanarak içerir.

Bu biraz kafa karıştırıcı olduğunu kabul ediyorum, ama en azından nasıl çalıştığına dair net ve basit bir açıklaması var.

Bu bölümde ayrıca bir dizi zorla kopya diziler ve kontrol etmek için nasıl iki dizi depolama paylaşmak ister benzersiz başvurulan, emin olmak için nasıl hakkında bilgi içerir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FILIPeeeK

    FILIPeeeK

    22 Mayıs 2006
  • ipsy

    ipsy

    1 EKİM 2012
  • Joseph Hayhoe

    Joseph Hayho

    20 Mayıs 2010