Rust 1.0 için güncellendi
Sen alamıyor &'static str
bir gelen String
çünkü String
senin programın tüm hayatı ve ne olduğunu yıllardan için canlı olmayabilir &'static
ömür anlamına gelir. Sadece String
kendi yaşam süresine göre parametrelendirilmiş bir dilim alabilirsiniz .
String
Bir dilime gitmek &'a str
iç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 String
uygulayan 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
/ &str
sen aracılığıyla bağlanan türleri her çifti ile kullanabilirsiniz - Deref
ile, örneğin, CString
/ CStr
ve OsString
/ OsStr
dan std::ffi
modül veya PathBuf
/ Path
dan std::path
modülü.
'static
ömür, dizenin asla ayrılmayacağı anlamına gelir, yani bir bellek sızıntısı. Bazıları&'static str
yerine neden ihtiyacın var ?&'a str
'a