返回Vec<& str>时字符串的生命周期

时间:2015-11-22 14:20:32

标签: string vector rust lifetime

简单代码:

fn foo() -> Vec<&'static str> {

    let mut vec = Vec::new();
    let mut string = String::new();

    // doing something with string...

    vec.push(string.as_str());

    return vector; // error here: string doesn't live long enough
}

我遇到问题,我需要使用字符串进行处理并将其作为str在Vec中返回。问题是绑定字符串的寿命不够长,因为它在foo之后超出了范围。我很困惑,我真的不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

&'static str是一个字符串文字,例如let a : &'static str = "hello world"。它贯穿整个应用程序的生命周期。

如果您要创建新的String,那么该字符串不是静态的!

只需返回String的矢量。

fn foo() -> Vec<String> {

    let mut vec = Vec::new();
    let mut string = String::new();

    // doing something with string...

    vec.push(string);

    return vec;
}

fn main() {
    foo();
}