我正在尝试制作两个在底层数据集上运行的结构体; 一个提供不可变的"读取"操作,另一个允许修改.为此,我需要能够在修改对象中使用读取函数 - 因此,我在修改器函数中创建一个临时的新读取对象,并查看基础数据.
这是一些代码:
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
寿命.我怎样才能编译?(并且,我想做的是什么?这是最简单/最简洁的方式吗?)