Rust 1.0 için güncellendi
Sen alamıyor &'static strbir gelen Stringçünkü Stringsenin programın tüm hayatı ve ne olduğunu yıllardan için canlı olmayabilir &'staticömür anlamına gelir. Sadece Stringkendi yaşam süresine göre parametrelendirilmiş bir dilim alabilirsiniz .
StringBir dilime gitmek &'a striçin dilimleme sözdizimini kullanabilirsiniz:
let s: String = "abcdefg".to_owned();
let s_slice: &str = &s[..];
Alternatif olarak, açık bir yeniden ödünç alma Stringuygulayan Deref<Target=str>ve gerçekleştiren gerçeğini kullanabilirsiniz :
let s_slice: &str = &*s;
Daha da kısa sözdizimine izin veren başka bir yol daha vardır, ancak bu yalnızca derleyici istenen hedef türünü belirleyebiliyorsa kullanılabilir (örneğin, işlev bağımsız değişkenlerinde veya açıkça yazılan değişken bağlamalarda). Buna deref zorlama denir ve sadece &operatörün kullanılmasına izin verir ve derleyici *bağlama göre uygun miktarda s'yi otomatik olarak ekler :
let s_slice: &str = &s;
fn take_name(name: &str) { ... }
take_name(&s);
let not_correct = &s;
Bu model için benzersiz olmadığı Not String/ &strsen aracılığıyla bağlanan türleri her çifti ile kullanabilirsiniz - Derefile, örneğin, CString/ CStrve OsString/ OsStrdan std::ffimodül veya PathBuf/ Pathdan std::pathmodülü.
'staticömür, dizenin asla ayrılmayacağı anlamına gelir, yani bir bellek sızıntısı. Bazıları&'static stryerine neden ihtiyacın var ?&'a str'a