这是一个片段:
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
上的方法不是我想要的。注意我的值是如何不可变的:我理解引用会引起别名,这个问题与此无关。