【问题标题】:String's lifetime when returning Vec<&str> [duplicate]返回 Vec<&str> 时字符串的生命周期 [重复]
【发布时间】:2015-11-22 14:20:32
【问题描述】:

简单代码:

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
}

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

【问题讨论】:

    标签: string vector rust lifetime


    【解决方案1】:

    &amp;'static str 是字符串文字,例如let a : &amp;'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();
    }
    

    【讨论】:

    • 你好,谢谢,把String改成str有帮助,所以str和String的方法一样吗?我说的对吗?
    • @RišoBaláž,这更像是String 具有与str 相同的方法等等,因为String 有一个Deref&lt;Target=str&gt; 实现。请参阅here(底部)和here
    • 习惯上,你不会使用return vec,你只是用vec结束方法。
    猜你喜欢
    • 2017-05-05
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多