Bu soru When is it useful to define multiple lifetimes in a struct?'a benzer, ancak umarım yeterince farklıdır. Bu sorunun cevabı faydalıdır, ancak bir yaklaşımın avantajlarına odaklanır (yapısal referanslar için ayrı yaşam sürelerini kullanarak), ancak dezavantajları (varsa). Bu soru, bunun gibi, yapıları oluştururken hayatların nasıl seçileceğine dair rehberlik arıyor. birbirine bağlı buNeden bir yapıda referanslar için aynı yaşamları kullandınız?
Çağrı versiyonu x ve y aynı ömrü olması gerekmektedir, çünkü:
struct Foo<'a> {
x: &'a i32,
y: &'a i32,
}
ve gevşek yaşam süreleri farklı olabileceği için, versiyonu çağırır:
struct Foo<'a, 'b> {
x: &'a i32,
y: &'b i32,
}
Başvurulan soruya verilen yanıt net bir durum verir. istemci kodu gevşek sürümü verilirken çalıştırılabilir/çalıştırılabilir, ancak sürümüne bağlı olarak başarısız olur. sürümü için birlikte çalışan herhangi bir istemci kodunun gevşek sürümü için de çalışacağı ve numaralı güvenliğin (yani güvenli) olduğu gibi garanti edileceği durum böyle değil mi? Ön yüzde doğru değildir. gevşek sürümü, bir yapı tasarımcısı perspektifinden açıkça daha esnektir. İyi/kabul edilmiş bir cevap olduğu düşünüldüğünde, rehberlik, bir numaralı yapıdaki referansları kullanırken, her zaman'u onlara farklı yaşam süreleri verebilir.
Bu tavsiyenin sakıncası, ekstra yazmayı göz ardı ederek nelerdir? Örneğin, bir yapıda referansları gerektiren için bir fayda var mı?
Belki de * foo <...> (... b: & str) * olmalıdır * foo <...> (... b: 'b & str) *? Kullanılmayan kapsamda derleyici hatası veya uyarısı yok 'b. Özgün soru ile farklı yaşamlara ihtiyaç duyulduğuna inanıyorum. Ama hey, eğer onları sadece bağımsız hale getirebilirse. Bence aynı yaşam süresinin avantajını gösteren bu örnek de çok çekişmeli. Müşterinin karşılaşabileceği tüm olası yaşam boyu sorunları kim bilir (veya bilmeli)? Fazladan yazarak rehber olmama izin veriyorum. Ne yazık ki, bir kez seçim yapıldığında değişiklik yapmak kolay değildir. – user1338952
@ user1338952 evet, örneklerin büyük çoğunluğu karşılanmaktadır; örnekler böyle çalışır. İkinci noktanıza * yazılım tasarımı * denir. Örneğin, " (a: A, b: A)" yazabilirken veya " (a: A) yazdığınızda" neden ekle (a: u8, b: u8) 'yazabilirsiniz? b: B) 'veya yazabildiğiniz zaman (a: A, b: B)'? Kodunuzun nasıl kullanılacağını düşünmek, yazılımı hem zorlayıcı hem de ödüllendiren şeydir. Evet, bazen yanlış anlıyoruz, bazen değişiklik yapmak zorundayız. –
Shepmaster
Konuyu kapsayan tüm bloglar (ör., Yapılarınız için yaşamları seçerken * yazılım tasarımı * seçimleri)? Bu biraz daha fazla: işte böyle. Ön serbest bırakma kitabı * Programlama Pası * 'nın üzerinde yazılı olan * Farklı Yaşam Ötesi Parametreleri * bölümüne sahiptir. İlk önce öneriyi denemek isterse, onları bağımsız olarak değiştirmelisiniz. Bu ölçeklerden emin değil. – user1338952