2017-07-27 7 views
1

Ich habe versucht, den folgenden Alias ​​Rust Typ:Warum benötigt dieser Rust-Typ-Alias ​​einen Lebensdauerparameter?

type Name = String; 

Es funktioniert gut. Also habe ich versucht, eine Variante:

type Name = &str; 

Das mit fehlgeschlagen:

error[E0106]: missing lifetime specifier 
--> src/main.rs:1:17 
    | 
1 |  type Name = &str; 
    |    ^expected lifetime parameter 

Warum ein Typ alias benötigen ein Leben lang Parameter würde und wie würde ich es hinzufügen?

Antwort

2

Das Problem ist String besitzt seinen Speicher, während &str ist ein Verweis auf eine str. Normalerweise können Sie Lebensdauern angeben, aber wenn eine Referenz in einem struct, enum gespeichert wird oder Alias ​​eingeben, müssen alle Lebensdauern angegeben werden. So ist der richtige Weg, um den Alias ​​zu schreiben ist:

type Name<'a> = &'a str; 

Die Lebensdauer nach dem Namen des Typs Alias ​​deklariert wird, und die Lebensdauer von &str angegeben 'a zu sein.

Lebenszeiten auf Typen können manchmal in Funktionen verschoben werden, weshalb Sie &str schreiben können. Dies gilt auch für andere Typen, einschließlich Aliase. Das heißt, dies gilt:

fn foo(s: &String) -> Name { s.as_str() } 

Die Lebensdauer Parameter auf Name wird hier elided.

Verwandte Themen