首页 > 解决方案 > 我可以从函数返回一个值和对它的引用吗?

问题描述

这是一个片段:

struct T {}

fn test<'a>() -> (T, &'a T) {
    let t = T{};
    (t, &t)
}

编译器告诉我该值的t寿命不够长,这并不完全正确,因为假设的调用者将拥有该值,所以他也得到一个参考是合理的:

let (value, reference) = test(); // The value is alive here, so it's perfectly fine to reference it at this point.

有没有办法实现这种行为?如果没有,除了像这样在单独的行上获得参考之外,是否有任何可能的解决方法?

let value = test();
let reference = &value;

我的实际案例不是关于参考,而是关于我不想超过返回的标记值T,但原理是一样的。而且我希望用户只能获得一个标记,所以一个方法T并不是我想要的。请注意我的值是如何不可变的:我知道引用会导致别名,而这个问题与此无关。

标签: rust

解决方案


推荐阅读