簡體   English   中英

Rust 參考壽命應超過 function

[英]Rust Lifetime of reference should outlive function

我有一個小虛擬解析器,它在解析過程中使用相同的 &str:

struct Parser<'a>{
    r: &'a str,
    pos: usize
}

impl<'a, 'b: 'a> Parser<'a>{
    fn new(s: &'b str)->Parser<'a>{
        Parser{r: s, pos:0}
    }
    fn next(&'a self)->Parser<'a>{
        Parser{r: self.r, pos: self.pos + 1}
    }
    fn nnext(&'a self)->Parser<'a>{
        Parser{r: self.r, pos: self.pos + 2}
    }
    fn nnnext(&'a self)->Parser<'a>{
        return self.next().nnext()
    }
}

我會這樣使用它:

fn parse(s: &str){
    let parser = Parser::new(s);
    parser.nnnext();
}

我收到以下錯誤:

25 |         return self.next().nnext()
   |                -----------^^^^^^^^
   |                |
   |                returns a value referencing data owned by the current function
   |                temporary value created here

保證該引用比所有 Parser 方法的壽命都長。 必須如何注釋生命周期來表達這一點? 特別是,為什么nnnext不編譯? 應該清楚的是,引用self.next().nnext()調用更有效。

非常感謝您提供的任何幫助。 亨德里克

通過使用&'a self ,您將解析器的生命周期與它所引用的字符串的生命周期混為一談。 沒有理由這樣做。

如果您刪除此約束,則不再有問題:

struct Parser<'a>{
    r: &'a str,
    pos: usize
}

impl<'a, 'b: 'a> Parser<'a>{
    fn new(s: &'b str)->Parser<'a>{
        Parser{r: s, pos:0}
    }
    fn next(&self)->Parser<'a>{
        Parser{r: self.r, pos: self.pos + 1}
    }
    fn nnext(&self)->Parser<'a>{
        Parser{r: self.r, pos: self.pos + 2}
    }
    fn nnnext(&self)->Parser<'a>{
        return self.next().nnext()
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM