簡體   English   中英

由於遞歸結構中的沖突要求,無法推斷出適當的生命周期

[英]Cannot infer an appropriate lifetime due to conflicting requirements in a recursive struct

當我嘗試編譯此代碼時:

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) }
    }
}

我收到這個錯誤:

error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'a` due to conflicting requirements
 --> src/main.rs:7:9
  |
7 |         Context { outer: Some(outer) }
  |         ^^^^^^^
  |
note: first, the lifetime cannot outlive the lifetime 'a as defined on the impl at 5:1...
 --> src/main.rs:5:1
  |
5 | / impl<'a> Context<'a> {
6 | |     pub fn inside(outer: &'a mut Context) -> Context<'a> {
7 | |         Context { outer: Some(outer) }
8 | |     }
9 | | }
  | |_^
note: ...so that expression is assignable (expected Context<'a>, found Context<'_>)
 --> src/main.rs:7:9
  |
7 |         Context { outer: Some(outer) }
  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: but, the lifetime must be valid for the anonymous lifetime #1 defined on the method body at 6:5...
 --> src/main.rs:6:5
  |
6 | /     pub fn inside(outer: &'a mut Context) -> Context<'a> {
7 | |         Context { outer: Some(outer) }
8 | |     }
  | |_____^
note: ...so that expression is assignable (expected &mut Context<'_>, found &mut Context<'_>)
 --> src/main.rs:7:31
  |
7 |         Context { outer: Some(outer) }
  |                               ^^^^^

為什么會這樣?

這是因為您沒有履行所需的義務。

由於終身省略,您的代碼相當於:

pub fn inside<'b>(outer: &'a mut Context<'b>) -> Context<'a>

將您的代碼更改為

pub fn inside(outer: &'a mut Context<'a>) -> Context<'a>

它會編譯。

暫無
暫無

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

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