Tek bir kesme işaretiyle gösterilen Rust türleri nelerdir?


94

Rust'ta tek bir kesme işaretiyle gösterilen birkaç türle karşılaştım:

'static
'r
'a

Bu kesme işaretinin önemi nedir? Belki bir referans değiştiricisi ( &)? Referanslara özgü genel tipleme? Bunun belgelerinin nerede saklandığı hakkında hiçbir fikrim yok.


1
bunlar yaşam süreleri olarak adlandırılır: static.rust-lang.org/doc/master/guide-lifetimes.html
Arjan

Önceki yorumdaki bağlantı artık çalışmıyor. Bunun eşdeğer olup olmadığını bilmiyorum: doc.rust-lang.org/book/lifetimes.html
Ellen Spertus

Ellen'ın bağlantısı da çalışmayı durdurdu - işte yenisi (Haziran 2019 itibarıyla): doc.rust-lang.org/book/ch10-03-lifetime-syntax.html

Yanıtlar:


75

Bunlar Rust'un isimli yaşam süreleridir.

Alıntı yapılıyor Rust Programlama:

Rust'taki her referansın bir ömrü vardır ve bu, söz konusu referansın geçerli olduğu kapsamdır. Zaman türlerinin çoğu gibi, çoğu zaman yaşamları örtük ve çıkarımlıdır. Birden çok tür mümkün olduğu için türlere açıklama eklememiz gerektiği zamanlara benzer şekilde, referansların yaşam sürelerinin birkaç farklı şekilde ilişkilendirilebileceği durumlar vardır, bu nedenle Rust, genel yaşam süresi parametrelerini kullanarak ilişkilere açıklama eklememize ihtiyaç duyar, böylece çalışma zamanında kullanılan gerçek referanslar kesinlikle geçerli olacaktır.

Ömür boyu ek açıklamalar, ilgili referanslardan herhangi birinin ne kadar süreyle canlı kaldığını değiştirmez. İmza genel bir tür parametresini belirttiğinde işlevlerin herhangi bir türü kabul edebildiği gibi, işlevler imza genel bir yaşam süresi parametresini belirttiğinde herhangi bir yaşam süresine sahip başvuruları kabul edebilir. Ömür boyu ek açıklamaların yaptığı şey, çoklu referansların yaşam sürelerini birbiriyle ilişkilendirmektir.

Ömür boyu ek açıklamalar biraz alışılmadık bir sözdizimine sahiptir: yaşam süresi parametrelerinin adları bir kesme işaretiyle başlamalıdır '. Ömür boyu parametrelerin adları genellikle küçük harflidir ve genel türler gibi adları da genellikle çok kısadır. 'açoğu kişinin varsayılan olarak kullandığı addır. Ömür boyu parametre ek açıklamaları &bir referansın ardından gelir ve bir boşluk, ömür boyu açıklamayı referansın türünden ayırır.

Başka bir deyişle, bir ömür, bir referansın işaret ettiği verilerin geçerli olduğu yürütme süresine yaklaşır. Rust derleyicisi, güvenli olmak için mümkün olan en kısa kullanım ömrünü ihtiyatlı bir şekilde çıkaracaktır. Derleyiciye bir referansın en kısa tahminden daha uzun yaşadığını söylemek istiyorsanız, örneğin çıktı referansının verilen bir girdi referansı ile aynı ömre sahip olduğunu söyleyerek onu adlandırabilirsiniz.

'staticProgram süresince - ömür boyu özel ömrünü en uzun bütün yaşamların yaşamış olduğunu. Tipik bir örnek, programın / modülün ömrü boyunca her zaman mevcut olacak dizge "değişmez değerleridir".

Bu slayt kümesinden daha fazla bilgi edinebilirsiniz29. slayttan başlayarak .

Rust'ta Yaşamlar ayrıca yaşamları da derinlemesine tartışıyor.


0

Quux00'ün mükemmel cevabına eklemek için, adlandırılmış yaşam süreleri ayrıca pas derleyicisine iade edilen ödünç alınan bir değişkenin kaynağını belirtmek için de kullanılır.

Bu işlev

pub fn f(a: &str, b: &str) -> &str {
  b
}

Bir ödünç değeri döndürür ama ödünç olmadığını belirtmez çünkü derlemek olmaz aya b.

Bunu düzeltmek için, adlandırılmış bir yaşam süresi bildirirsiniz ve aynı yaşam süresini bve dönüş türünü kullanırsınız:

pub fn f<'r>(a: &str, b: &'r str) -> &'r str {
//      ----              ---         ---
  b
}

ve beklendiği gibi kullan

f("a", "b")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.