如何处理“由于需求冲突,无法为autoref推断适当的生存时间”

问题描述

我从ExchangeInfo结构中获得了此方法,该方法RwLockReadGuardRef板条箱中返回了owning_ref

pub fn get_pair<'a,'me: 'a>(
    &'me self,name: &str,) -> RwLockReadGuardRef<'a,TradePairHashMap,Arc<RwLock<TradePair>>> {
    RwLockReadGuardRef::new(self.pairs.read().unwrap()).map(|pairs| pairs.get(name).unwrap())
}

我想在这里称呼它

pub async fn get_pair<'a>(
    name: &str,exchange_info: &'a ExchangeInfo,retrieval: &dyn ExchangeInfoRetrieval,refresh: bool,) -> Result<OwningRef<&'a ExchangeInfo,RwLockReadGuard<'a,TradePair>>> {
    if refresh {
        if let Err(err) = exchange_info.refresh(retrieval).await {
            return Err(err);
        }
    }

    Ok(OwningRef::new(exchange_info).map(|e| &e.get_pair(name).read().unwrap()))
}

不幸的是,我收到以下错误

error[E0495]: cannot infer an appropriate lifetime for autoref due to conflicting requirements
  --> shared/src/exchange_info.rs:25:49
   |
25 |     Ok(OwningRef::new(exchange_info).map(|e| &e.get_pair(name).read().unwrap()))
   |                                                 ^^^^^^^^
   |
note: first,the lifetime cannot outlive the anonymous lifetime #2 defined on the body at 25:42...
  --> shared/src/exchange_info.rs:25:42
   |
25 |     Ok(OwningRef::new(exchange_info).map(|e| &e.get_pair(name).read().unwrap()))
   |                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...so that reference does not outlive borrowed content
  --> shared/src/exchange_info.rs:25:47
   |
25 |     Ok(OwningRef::new(exchange_info).map(|e| &e.get_pair(name).read().unwrap()))
   |                                               ^
note: but,the lifetime must be valid for the lifetime `'a` as defined on the function body at 13:23...
  --> shared/src/exchange_info.rs:13:23
   |
13 | pub async fn get_pair<'a>(
   |                       ^^
note: ...so that the expression is assignable
  --> shared/src/exchange_info.rs:25:5
   |
25 |     Ok(OwningRef::new(exchange_info).map(|e| &e.get_pair(name).read().unwrap()))
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   = note: expected `std::result::Result<owning_ref::OwningRef<&'a exchange_info::ExchangeInfo,std::sync::RwLockReadGuard<'a,_>>,_>`
              found `std::result::Result<owning_ref::OwningRef<&exchange_info::ExchangeInfo,std::sync::RwLockReadGuard<'_,_>`

我该如何解决

有完整的playground

感谢您的回答:)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)