嗨,我想知道如何实现以下代码:
struct TimedCache<T> {
data: RwLock<T>,
f: fn() -> T,
}
impl<T> TimedCache<T> {
fn get(&self) -> &T {
&self.data.read().unwrap()
}
}
因为我获得了cannot return reference to temporary value
答案 0 :(得分:4)
实际上,很可靠,很简单-我们不返回&T
,而是返回守卫实现的特征,该特征允许我们进入&T
:Deref
!
impl<T> TimedCache<T> {
fn get(&self) -> impl Deref<Target = T> + '_ {
let lock = self.data.read();
lock.unwrap()
}
}
这具有引用的所有优点,而没有缺点-您甚至不需要知道实际上是在操纵RwLock
读取保护程序。在外部,这看起来像一个实现deref()
的对象。