2016-06-24 32 views
3

我希望這個代碼工作,因爲所有綁定在同一個範圍:「不活足夠長的時間」錯誤的相同功能

fn main() { 
    let mut foobar = vec!["foo"]; 
    let bar = "bar".to_string(); 
    foobar.push(&bar); 
} 

但我收到此錯誤:

error: `bar` does not live long enough 
--> baz.rs:4:18 
    |> 
4 |>  foobar.push(&bar); 
    |>     ^^^ 
note: reference must be valid for the block suffix following statement 0 at 2:33... 
--> baz.rs:2:34 
    |> 
2 |>  let mut foobar = vec!["foo"]; 
    |>        ^
note: ...but borrowed value is only valid for the block suffix following statement 1 at 3:32 
--> baz.rs:3:33 
    |> 
3 |>  let bar = "bar".to_string(); 
    |>        ^

error: aborting due to previous error 

回答

5

在同一個塊中聲明的變量以聲明的相反順序被刪除。在你的代碼,barfoobar之前被丟棄:

fn main() { 
    let mut foobar = vec!["foo"]; // <---------| 0 
    let bar = "bar".to_string(); // <--| 1 | 
    foobar.push(&bar);   // | bar | foobar 
            // <--|  | 
            // <---------| 
    // In the error message 
    // 0 is called "block suffix following statement 0", and 
    // 1 is called "block suffix following statement 1" 
} 

爲了讓代碼編譯,申報barfoobar

fn main() { 
    let bar = "bar".to_string(); 
    let mut foobar = vec!["foo"]; 
    foobar.push(&bar); 
} 
相關問題