Mis à jour pour Rust 1.0
Vous ne pouvez pas obtenir &'static strd'un Stringcar Strings peut ne pas vivre toute la durée de vie de votre programme, et c'est ce que &'staticsignifie la vie. Vous ne pouvez paramétrer une tranche que parString propre durée de vie.
Pour passer d'une Stringtranche à une autre, &'a strvous pouvez utiliser la syntaxe de découpage:
let s: String = "abcdefg".to_owned();
let s_slice: &str = &s[..]; // take a full slice of the string
Alternativement, vous pouvez utiliser le fait qui Stringimplémente Deref<Target=str>et effectue un réemprunt explicite:
let s_slice: &str = &*s; // s : String
// *s : str (via Deref<Target=str>)
// &*s: &str
Il existe même une autre méthode qui permet une syntaxe encore plus concise, mais elle ne peut être utilisée que si le compilateur est capable de déterminer le type de cible souhaité (par exemple dans des arguments de fonction ou des liaisons de variables typées explicitement). Elle s'appelle deref coercion et permet d'utiliser uniquement l' &opérateur, et le compilateur insérera automatiquement une quantité appropriée de *s en fonction du contexte:
let s_slice: &str = &s; // okay
fn take_name(name: &str) { ... }
take_name(&s); // okay as well
let not_correct = &s; // this will give &String, not &str,
// because the compiler does not know
// that you want a &str
Notez que ce modèle n'est pas unique pour String/ &str- vous pouvez l'utiliser avec chaque paire de types qui sont connectés Deref, par exemple, avec CString/ CStret OsString/ OsStrdepuis le std::ffimodule ou PathBuf/ Pathdepuis le std::pathmodule.
'staticdurée de vie impliquerait que la chaîne ne soit jamais désallouée, c'est-à-dire une fuite de mémoire. Pourquoi avez-vous besoin&'static strau lieu de&'a strcertains appropriés'a?