2017-07-27 44 views
1

我嘗試以下防鏽類型別名:爲什麼這個Rust類型別名需要一個生命週期參數?

type Name = String; 

它工作正常。所以,我想變體:

type Name = &str; 

這種失敗:

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

爲什麼一個類型別名需要一輩子的參數,我會怎麼加呢?

回答

2

問題是String擁有它的內存,而&str是對str的引用。通常您可以延長生命期,但是當參考文件存儲在struct,enum或類型別名中時,必須指定所有生存期。所以寫別名正確的方法是:

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

壽命類型別名的名稱後聲明,以及&str壽命被指定爲'a

有時類型上的生存時間有時可能會被忽略,這就是爲什麼你可以寫&str。這也適用於其他類型,包括類型別名。這意味着,這是有效的:

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

Name壽命參數此處省略。

相關問題