首先是工作代码:
use std::cell::{Ref, RefCell};
use std::rc::Rc;
struct ValueHolder {
value: i32
}
fn give_value(wrapped: &Rc<RefCell<ValueHolder>>) -> Ref<i32> {
Ref::map(
(**wrapped).borrow(),
|borrowed| { &(*borrowed).value },
)
}
fn main() {
println!("Our value: {}", *give_value(
&Rc::new(RefCell::new(ValueHolder { value: 1337 }))
));
}
相关部分是give_value
功能。
我想将 a 返回Ref
到 a 内的某个东西Rc<RefCell<>>
,在本例中是一个结构内的值。
这很好用,但由于我刚开始学习 Rust,我想知道如何在不使用Ref::map
.
“天真的”方法:
fn give_value(wrapped: &Rc<RefCell<ValueHolder>>) -> &i32 {
&(*(**wrapped).borrow()).value
}
失败的原因很明显:
error[E0515]: cannot return value referencing temporary value
--> src/bin/rust_example.rs:9:5
|
9 | &(*(**wrapped).borrow()).value
| ^^^--------------------^^^^^^^
| | |
| | temporary value created here
| returns a value referencing data owned by the current function
所以我的问题是:我怎样才能重新创建自己的Ref::map
功能?