由于递归结构中的需求冲突,因此无法推断出适当的生存期

Zac*_*Zac 5 lifetime rust

当我尝试编译此代码时:

pub struct Context<'a> {
    pub outer: Option<&'a mut Context<'a>>,
}

impl<'a> Context<'a> {
    pub fn inside(outer: &'a mut Context) -> Context<'a> {
        Context { outer: Some(outer) }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

pub struct Context<'a> {
    pub outer: Option<&'a mut Context<'a>>,
}

impl<'a> Context<'a> {
    pub fn inside(outer: &'a mut Context) -> Context<'a> {
        Context { outer: Some(outer) }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

She*_*ter 5

这是因为您没有履行您所要求的义务。

由于生命周期省略,您的代码相当于:

pub fn inside<'b>(outer: &'a mut Context<'b>) -> Context<'a>
Run Code Online (Sandbox Code Playgroud)

将您的代码更改为

pub fn inside(outer: &'a mut Context<'a>) -> Context<'a>
Run Code Online (Sandbox Code Playgroud)

它会编译。