2014-10-06 43 views
0

我在鏽新和不理解一個時刻的不知所云behaivior() - >&STR功能

Pointer's Guide說:「你真的不應該返回指針」。我很好,但在我的HelloWorld類程序中,我試圖返回& str。我不需要盒裝字符串,只需要& str立即打印它。而且我成功了這個挑戰,但只是部分。

所以,問題本身

爲什麼我可以

fn foo(p: &[uint]) -> &str { "STRING" } 

,但不能

fn foo(p: Vec<uint>) -> &str { "STRING" } //error: missing lifetime specifier [E0106] 

,但仍然可以

fn foo(p: Vec<uint>) -> &'static str { "STRING" } 

什麼改變從片切換到Vec的事實?

P.S.對不起,我的假英文和虛擬問題。我想,我只是沒有得到生鏽的借位checher點

+0

的「不歸指針」位是指當呼叫者迫使'Box'或其他擁有指針。當借來的指針沒有不適當的扭曲時,使用它。 – delnan 2014-10-06 15:42:17

回答

6

這就是一生符會自動添加:

此:

fn foo(p: &[uint]) -> &str { "STRING" } 

在過去,你不得不把它寫explicilty:

fn foo<'a>(p: &'a [uint]) -> &'a str { "STRING" } 

這兩者是等價的(但不是真的準確的,因爲輸入p並返回str不相關)。它可以工作,因爲'static>'a因此在任何生命週期中始終有效。

第二個例子不會工作,因爲沒有輸入參考所以沒有自動壽命 參數被添加和整個事情是沒有意義的(每參考需要一個的壽命,顯式或隱式):

fn foo(p: Vec<uint>) -> &str { "STRING" } 

作爲你已經做了你通過將一生的時間去修復它吧:

fn foo(p: Vec<uint>) -> &'static str { "STRING" }