如何返回对临时值的引用?

时间:2019-10-11 20:06:49

标签: rust

嗨,我想知道如何实现以下代码:

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

1 个答案:

答案 0 :(得分:4)

实际上,很可靠,很简单-我们不返回&T,而是返回守卫实现的特征,该特征允许我们进入&TDeref

impl<T> TimedCache<T> {
    fn get(&self) -> impl Deref<Target = T> + '_ {
        let lock = self.data.read();
        lock.unwrap()
    }
}

这具有引用的所有优点,而没有缺点-您甚至不需要知道实际上是在操纵RwLock读取保护程序。在外部,这看起来像一个实现deref()的对象。

playground

上有完整的示例,包括使用示例。