我正在尝试制作两个对基础数据集进行操作的结构体;一个提供不可变的“读取”操作,另一个允许修改。为此,我需要能够在修改对象中使用读取函数 - 因此,我在修改器函数中创建一个临时的新读取对象,并查看基础数据。
以下是一些代码:
struct Read<'db> {
x: &'db i32
}
impl<'db> Read<'db> {
pub fn get(&'db self) -> &'db i32 { self.x }
}
struct Write<'db> {
x: &'db mut i32
}
impl<'db> Write<'db> {
fn new(x: &mut i32) -> Write { Write{x: x} }
fn as_read(&'db self) -> Read<'db> {
Read{x: self.x}
}
pub fn get(&'db self) -> &'db i32 { self.as_read().get() }
}
fn main() {
let mut x = 69i32;
let y = Write::new(&mut x);
println!("{}", y.get());
}
它没有编译 - 似乎尽管我付出了最大努力,但从Read::get
返回的引用的生命周期仍然绑定到Write::get
的范围,而不是Write
''db
一生。我怎样才能编译? (并且,我想做的是什么?这是最简单/最简洁的方式吗?)