【发布时间】:2021-04-17 06:52:00
【问题描述】:
我有一个特点:
pub trait HasQuux {
fn quux(&self) -> &Quux;
}
大多数实现这一点的结构都有一个Quux 字段,可能是嵌套的,它们可以返回一个引用。例如
pub struct Foo {
...
q: Quux,
...
}
impl HasQuux for Foo {
fn quux(&self) -> &Quux {
&self.q
}
}
如何为必须计算 Quux 的结构实现 HasQuux?
这个实现:
impl HasQuux for Bar {
fn quux(&self) -> &Quux {
let q: Quux = self.calc_quux();
&q
}
}
原因:
error[E0515]: cannot return reference to local variable `q`
--> /home/fadedbee/test.rs:38:3
|
38 | &q
| ^^ returns a reference to data owned by the current function
我希望 quux() 返回一个引用,因为 99% 的实现 HasQuux 的结构都有一个 Quux 字段。
我明白为什么这是不可能的。
我可以创建一个临时的Quux,它的生命周期与Bar 的生命周期相匹配并返回一个对它的引用吗?
或者有更好的解决方案吗?
【问题讨论】:
标签: rust reference borrow-checker