问题描述
我从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 (将#修改为@)