对 RefCell 中数据的不可变引用
Immutable reference to data in RefCell
我正在尝试为具有内部可变性的结构实现 Index 方法:
pub struct FooVec {
foo: RefCell<Vec<i32>>
}
impl Index<usize> for FooVec {
type Output = i32;
fn index(&self, index: usize) -> &Self::Output {
self.foo.borrow().index(index)
}
}
但是,由于以下原因,这无法编译:
error[E0515]: cannot return value referencing temporary value
--> src\lacc\expr.rs:9:9
|
9 | self.foo.borrow().index(index)
| -----------------^^^^^^^^^^^^^
| |
| returns a value referencing data owned by the current function
| temporary value created here
我的解决方案是 return RefCell 中向量的引用。但我找到的唯一方法
这是 get_mut() 并且对于 Index 特征,我需要 return 一个不可变的引用...
如果有任何关于如何处理此问题的建议,我将不胜感激。
你不能实现 Index
:Index
特性需要 returning 引用,这意味着它必须 return 附加到和普通 可从对象访问。
这里不是这种情况,因为您需要通过 RefCell::borrow
,它的功能基本上就像是从头开始创建一个值(因为它只通过 a Ref "lock guard" 分发访问权限)。
I would appreciate any suggestions on how to deal with this.
做点别的。 Index
不是一个选项。考虑到所涉及的类型,我建议只实施一个 get
方法,其中 return 是一个 Option<i32>
,类似的东西。
我正在尝试为具有内部可变性的结构实现 Index 方法:
pub struct FooVec {
foo: RefCell<Vec<i32>>
}
impl Index<usize> for FooVec {
type Output = i32;
fn index(&self, index: usize) -> &Self::Output {
self.foo.borrow().index(index)
}
}
但是,由于以下原因,这无法编译:
error[E0515]: cannot return value referencing temporary value
--> src\lacc\expr.rs:9:9
|
9 | self.foo.borrow().index(index)
| -----------------^^^^^^^^^^^^^
| |
| returns a value referencing data owned by the current function
| temporary value created here
我的解决方案是 return RefCell 中向量的引用。但我找到的唯一方法 这是 get_mut() 并且对于 Index 特征,我需要 return 一个不可变的引用...
如果有任何关于如何处理此问题的建议,我将不胜感激。
你不能实现 Index
:Index
特性需要 returning 引用,这意味着它必须 return 附加到和普通 可从对象访问。
这里不是这种情况,因为您需要通过 RefCell::borrow
,它的功能基本上就像是从头开始创建一个值(因为它只通过 a Ref "lock guard" 分发访问权限)。
I would appreciate any suggestions on how to deal with this.
做点别的。 Index
不是一个选项。考虑到所涉及的类型,我建议只实施一个 get
方法,其中 return 是一个 Option<i32>
,类似的东西。