Diperbarui untuk Rust 1.0
Anda tidak dapat memperoleh &'static strdari Stringkarena Strings tidak mungkin hidup untuk seluruh kehidupan dari program Anda, dan bahwa ini apa &'staticberarti seumur hidup. Anda hanya bisa mendapatkan potongan yang diparameterisasi menurut Stringmasa hidupnya.
Untuk beralih dari a Stringke slice, &'a strAnda dapat menggunakan sintaks slicing:
let s: String = "abcdefg".to_owned();
let s_slice: &str = &s[..];
Atau, Anda dapat menggunakan fakta yang Stringmengimplementasikan Deref<Target=str>dan melakukan peminjaman kembali secara eksplisit:
let s_slice: &str = &*s;
Bahkan ada cara lain yang memungkinkan sintaks yang lebih ringkas tetapi hanya dapat digunakan jika kompiler dapat menentukan tipe target yang diinginkan (misalnya dalam argumen fungsi atau binding variabel yang diketik secara eksplisit). Ini disebut paksaan deref dan memungkinkan menggunakan &operator saja , dan kompilator akan secara otomatis memasukkan jumlah yang sesuai *berdasarkan konteks:
let s_slice: &str = &s;
fn take_name(name: &str) { ... }
take_name(&s);
let not_correct = &s;
Perhatikan bahwa pola ini tidak unik untuk String/ &str- Anda dapat menggunakannya dengan setiap pasangan tipe yang dihubungkan Deref, misalnya, dengan CString/ CStrdan OsString/ OsStrdari std::ffimodul atau PathBuf/ Pathdari std::pathmodul.
'staticmasa hidup akan menyiratkan bahwa string tidak pernah dibatalkan alokasinya, yaitu kebocoran memori. Mengapa Anda membutuhkan,&'static strbukan&'a struntuk beberapa yang sesuai'a?