rust - 如何返回 RefCell 值的参考
问题描述
我正在实施双向链表来学习生锈。
要获得双向链表值,
我想返回对值的引用。
如果我只是返回值,我可以。
但是如果我这样做,列表值必须实现Clone
特征......
我应该怎么做?
这是我的示例代码。
use std::rc::Rc;
use std::cell::RefCell;
struct Person{
age: Rc<RefCell<i32>>,
}
impl Person {
fn get_string<'a>(&'a self) -> &'a i32{
// acutually do while loop until reach designated index
let person_age = *self.age.borrow_mut();
// I want to return reference to i32
&person_age
}
}
fn main() {
let age = Rc::new(RefCell::new(10));
let person = Person{age:Rc::clone(&age)};
println!("person name is {}", person.get_string());
}
解决方案
你应该Ref
像RefCell 一样返回
fn get_string(&self) -> Ref<i32>{
return self.age.borrow_mut()
}
除了它实现了 Drop 之外,它的行为应该或多或少类似于引用。它在 RefCell 中使用而不是引用,因为它确实可以维护 RefCell 不变量,因此当您使用 RefCell 时,您应该使用它。
推荐阅读
- raspberry-pi - Pivpn 没有网络
- c# - C# 桌面应用程序的真实用户监控
- python - 隐形参数python
- react-virtualized - react什么时候对真实dom应用更改?
- java - 将SB项目作为Jar文件运行时无法启动ServletWebServerApplicationContext,但在IDEA中执行时很好
- macos - “GPU 进程不可用。再见。”
- flutter - 如何在 Flutter 上将 RGB 转换为 CIELAB 或 L* a* b*
- ios - 在集合视图中更改焦点而不使用动画
- javascript - 使用 JavaScript 从解析的 JSON 对象中定位特定数据
- sql - How to print child, father, mother from these two tables?